0

pyusb を使用して USB 経由で受信した整数値の配列を 16 進値のリストに変換したいと思います。これらの 16 進値が常に 2 バイト、つまり 0x## になるようにしたいと思います。ただし、通常の hex() 関数は入力 1 で 0x1 を返します。0x01 を返したいと思います。

次に、16 進数値のリストを取得した後、「0x」部分を破棄しながらそれらを追加したいと思います。これは私が現在持っているもので、かなりシンプルです。

data_read = dev.read(0x82,64,0,1000)
hex_data = range(0,len(data_read))

for i in range(0,len(data_read)):
    hex_data[i] = hex(data_read[i])

何か案は?私はそれをごまかしてずさんな方法で行うことができますが、それを行う適切な方法があることを望んでいました. ありがとうございました。

アップデート:

 data_read = dev.read(0x82,64)
 print data_read
 >>> array('B', [169, 86, 128, 1, 0, 128])
 for i in range(0,len(data_read)):
      hex_data[i] = hex(data_read[i])
 print hex_data
 >>> ['0xa9', '0x56', '0x80', '0x1', '0x0', '0x80']

Lavon によって提案された方法は、結果の 16 進値が技術的にコード内の文字列だったため機能しませんでした。代わりに、16 進数に変換する for ループ全体をスキップし、Lavon と moooeeeep が提案したように直接実行しました。ありがとう!

hex_data = ('%02x' %i for i in data_read)
print ''.join(hex_data)
>>> a95680010080

構文に使用する適切なリファレンスはありますか? つまり、使用した「%02x」ですか? 私はそれを見たことがないので、もっとよく理解したいと思っています。

4

3 に答える 3

1

次に、16進値のリストを取得した後、「0x」の部分を破棄しながらそれらを一緒に追加したいと思います。

あなたはこのようなことを意味しますか?

In [8]: data_read = [0x01, 0x2b, 0x22, 0x10]

In [9]: ''.join(map(lambda v: '%02x' % v, data_read))
Out[9]: '012b2210'

于 2012-05-04T20:48:36.863 に答える
1

これは法案に合っていますか?

data = [0x1, 0x4, 0x5, 0xFF, 0x12]

new_data = ['%02X' %i for i in data]
print ''.join(new_data)

収量:

010405FF12

リスト内包表記と結合操作を使用します。

または、@moooeeeep で提案されているように、ジェネレーターを使用したソリューションは次のとおりです。

new_data = ('%02X' %i for i in data)
print ''.join(new_data)

文字列の書式設定オプションについては、これを参照してください

于 2012-05-04T20:52:32.663 に答える
0

それを行うためのちょうど別の方法

>>> data_read = [0x01, 0x2b, 0x22, 0x10]
>>> ("{:02x}"*len(data_read)).format(*data_read)
'012b2210'
于 2012-05-04T21:06:26.857 に答える