1

私はこれについて混乱しています。16進バイトを印刷する方法:

 [0x05, 0x06, 0x40, 0xFD, 0x05]

コンソールでこのように:

 05 06 40 FD 05    

そして、これをto_string関数でどのように使用しますか?

def to_string(bytes):
    cmd = '%02X'.join(chr(b) for b in self.bytes) #does not work obviously
    return cmd

print to_string([0x05, 0x06, 0x40, 0xFD, 0x05])

私はあなたの答えから一般化できると思いました。

4

2 に答える 2

6

%02X 文字列フォーマッタを使用します:

>>> print '%02X' % 0x05
05
>>> for i in [0x05, 0x06, 0x40, 0xFD, 0x05]:
...     print '%02X' % i,
...
05 06 40 FD 05

またはそれを1つの文字列にする:

>>> ' '.join(['%02X' % i for i in [0x05, 0x06, 0x40, 0xFD, 0x05]])
'05 06 40 FD 05'
于 2012-10-19T08:38:50.660 に答える
0

Martijnの答えは正しい答えですが、ここにあなたがなじみのないかもしれないいくつかの関連する関数があります。

Pythonformat文字列演算子を使用すると:

>>> for i in [0x05, 0x06, 0x40, 0xFD, 0x05]:
...     print "{:02X}".format(i),
...
05 06 40 FD 05

実際にデータをバイト文字列として持っている場合binascii.hexlifyは、同じことを行うために使用できます。

>>> import binascii
>>> data = ["\x05", "\x06", "\x40", "\xFD", "\x05"]
>>> for d in data:
...     print binascii.hexlify(d),
...
05 06 40 fd 05

hex()データがパディングされなくてもかまわない場合は、既存のデータでビルトインを使用することもできます。

>>> data = [0x05, 0x06, 0x40, 0xFD, 0x05]
>>> for i in data:
...     print hex(i),
...
0x5 0x6 0x40 0xfd 0x5
>>>
>>>
>>> # Or use the slice operator to cut off the initial "0x"
>>> for i in data:
...     print hex(i)[2:],
...
5 6 40 fd 5
于 2012-10-19T09:09:24.513 に答える