如果您只是想在控制台获取字符串\0x4b0
作为表示,则需要在控制台实际调用print
它:
>>> s='\\0{}'.format(hex(1200)[1:])
>>> s
'\\0x4b0'
>>> print s
\0x4b0
>>> s2='\\0'+hex(1200)[1:]
>>> s2
'\\0x4b0'
>>> print s2
\0x4b0
如果您只是在控制台中 FORM 字符串(即,它不会通过print
),Python 会向您展示它的表示形式:
>>> '\\0{}'.format(hex(1200)[1:])
'\\0x4b0'
>>> repr(s2)
"'\\\\0x4b0'"
>>> s2
'\\0x4b0'
编辑(根据您的评论):
我假设这是一台旧的 HP 绘图仪?
不要被 shell 显示为字符串的内容所迷惑。
你声明你想产生一个字符串\x<someNumGoesHere>
(或者它是否\x0<someNumGoesHere>
带有前导0
?)
方法如下:
>>> def angle_string(angle):
... return '\\0{}'.format(hex(angle)[1:])
...
>>> angle_string(1200)
'\\x04b0'
>>> print _
\x04b0
>>> angle_string(33)
'\\x021'
>>> print _
\x021
当您将字符串发送到您的设备时(通过 OS 文件/类似打印服务到 RS232 端口),它将与您格式化它一样。
编辑 2
字符串插值是这些字符串文字的过程:
>>> s1
'\n\n\t\tline'
翻译成这样:
>>> print s
line
从逻辑上讲,这些文字字符是单个字符:
>>> s1[0]
'\n'
>>> len('\\')
1
我的猜测是您打开串行端口的方式s
是使用字符串是原始模式,因此字符串\\x0123
是以这种方式发送(原始模式)而不是被解释为\x0123
您可以尝试解决此问题:
>>> cmd=chr(92)+'0'+hex(1200)[1:]
>>> s.write(cmd)
我认为您还需要在FileLike模式下打开串行端口,以便将字符串文字作为正确的单个字符发送。