0

メッセージを正常に機能する形式ser.write('\x01\x03\x01')で COM ポートに送信しています。次のように機能する関数を作成しようとしています。

def func(inp):
# transport inp to hex format and to be like \xXY (two digits)
# merge in the way '\x01'+'\xXY'+'\x01'

しかし、バックスラッシュの挿入 (2 つのバックスラッシュのように挿入できますが、ポートは単一のバックスラッシュとして読み取ることができません) またはインタープリターによるこのバックスラッシュの読み取り (エラーが発生します) のいずれかで常に問題が発生します。
誰かがすでにそれを行っている場合は、私を助けてください!

4

2 に答える 2

0

これは、まさに Python のstruct モジュールの目的です。関数は次のように記述できます。

import struct

>>> def func(inp):
...     return struct.pack('bbb', 1, inp, 1)
...
...
>>> func(22)
'\x01\x16\x01'

フォーマット文字は、'b'バイト値を'B'符号付き文字として解釈し、符号なし文字として解釈します。

于 2013-04-19T16:58:26.520 に答える
0

binascii.unhexlify16進文字列の変換に使用できます

>>> import binascii
>>> binascii.unhexlify('010203') == '\x01\x02\x03'
True

だからあなたの機能は

def func(inp):
    return '\x01' + binascii.unhexlify(inp) + '\x01';
于 2013-04-19T16:55:37.900 に答える