コンソールでの表現として文字列を取得しようとしているだけの場合は\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 プロッターだと思いますか?
シェルが文字列として表示しているものに混乱しないでください。
の文字列を生成したいと述べています\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モードでシリアル ポートを開く必要もあると思います。