1

PC 上の python スクリプトと組み込みの c の間で通信しています。次の問題があります。

mcu (組み込みの c) から、整数と浮動小数点数のバイナリ表現を送信しています。Br@y の端末を使用して、数値のバイナリ表現が MCU から送信されていることを確認しました。Python スクリプトでは、pySerial の serial.read を使用してバイトを取得し、それらをリストに入れます。

MCU から次の数値を送信すると: 0x10000000 (リトルエンディアンで 16 を基数とする 10)、Python スクリプトでは '\x10\x00\x00\x00' として表示されます。一貫したインデックスから文字を引き出します。ただし、2 つの 16 進数が ASCII 文字を表す場合、文字列には \xDD の代わりに ASCII 文字が含まれます。

文字列が ascii 値ではなく \xDD 表現のみを使用するように強制する方法はありますか? または、文字列を反復処理して、'\x' を削除し、ASCII 値を変換する必要がありますか?

ありがとう

4

2 に答える 2

2

Python は常に同じ方法で文字列を出力します。

binascii モジュールの "hexlify" 関数を試してください:

>>> binascii.hexlify('\x10\x00\x00\x00')
'10000000'
于 2011-06-09T20:26:20.537 に答える
2

が文字列にあると確信して\xいますか? これは Python のバイナリ データの表現文字列 (repr) のように見えますが、文字\xは実際には文字列に含まれていません。

struct モジュールは、バイナリ データをアンパックできます。

s = '\x10\x00\x00\x00'
i = struct.unpack("I", s)[0]

iは 16 (int) になりました。

于 2011-06-09T19:42:42.870 に答える