1

私は次のような機能を持ってhex2intいます:

import binascii

def hex2int(hexdata):
    return [ord(c) for c in binascii.unhexlify(hexdata)]

文字列を次のようにします

'000000000000000000030c1a314a616d72614d331f0e0603010100000000000000010101010000010305060502000000021c4179b1dcedd2a76e41210e0906040403020202020100020825528dcdf2ffe0a86f3b22130c0a08060402000000000001010203020100000000000000000000000000000203030200000000020307142c5584a8bba37c4e28160c080603000000000000000001010101010101010101000000000000000d285c93c5dac7a06c4226160f0a0704030303030403030100000000000000000002030405040301000000000000000000000000000000000000000000000007111c2732404d5a61675f5342322118100d0a080604020100'

次のリストに:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 26, 49, 74, 97, 109, 114, 97, 77, 51, 31, 14, 6, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 3, 5, 6, 5, 2, 0, 0, 0, 2, 28, 65, 121, 177, 220, 237, 210, 167, 110, 65, 33, 14, 9, 6, 4, 4, 3, 2, 2, 2, 2, 1, 0, 2, 8, 37, 82, 141, 205, 242, 255, 224, 168, 111, 59, 34, 19, 12, 10, 8, 6, 4, 2, 0, 0, 0, 0, 0, 1, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 2, 0, 0, 0, 0, 2, 3, 7, 20, 44, 85, 132, 168, 187, 163, 124, 78, 40, 22, 12, 8, 6, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 13, 40, 92, 147, 197, 218, 199, 160, 108, 66, 38, 22, 15, 10, 7, 4, 3, 3, 3, 3, 4, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 4, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 17, 28, 39, 50, 64, 77, 90, 97, 103, 95, 83, 66, 50, 33, 24, 16, 13, 10, 8, 6, 4, 2, 1, 0]

int2hexこのリストを取得して最初の文字列を返す逆関数を作成しようとしています。

私は現在持っています

def int2hex(intdata):
    return binascii.hexlify(''.join([hex(i) for i in intdata]))

しかし、それは正しい結果を返しません。どこが間違っているのか説明していただけますか?

4

4 に答える 4

4

Python 2.7以降の理解なし:

binascii.hexlify(bytearray(my_list))

Python 2.6では、bytearrayとは異なり、「読み取り専用」バッファが必要です。

binascii.hexlify(buffer(bytearray(my_list)))
于 2013-03-18T17:11:59.787 に答える
4

使用するだけformat()です:

''.join(format(my_int, '02x') for my_int in my_list)

各整数値を 2 桁の小文字の 16 進数値としてフォーマットし、値が 16 未満の場合は先頭に 0 を付けます。

于 2013-03-18T17:10:55.810 に答える
3
print ''.join("%02x"%my_int for my_int in my_list)
于 2013-03-18T17:10:02.397 に答える
1

あなたが抱えている問題に対処するいくつかの良い答えがここにありますが、なぜあなたがそれを抱えているのかを説明しないでください.

走るとき

 >>> binascii.unhexlify(hexdata)
 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x0c\x1a1JamraM3\x1f\x0e\x06\x03x01\x01x00x00x00x00\x00\x00\x00\x01\x01\x01\x01\x00\x00\x01\x03\x05\x06\x05\x02\x00\x00x00x02x1cAy\xb1\xdc\xed\xd2\xa7nA!\x0e\t\x06\x04\x04\x03\x02\x02\x02\x02\x01\x00x02x08%Rx8d\xcd\xf2\xff\xe0\xa8o;"\x13\x0c\n\x08\x06\x04\x02\x00\x00\x00x00x00x01x01x02\x03\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00x00x02x03x03\x02\x00\x00\x00\x00\x02\x03\x07\x14,U\x84\xa8\xbb\xa3|N(\x16x0cx08x06x03x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x01\x01\x01\x01x01x01x01\x00x00x00\x00\x00\x00\x00\r(\\\x93\xc5\xda\xc7\xa0lB&\x16\x0f\n\x07x04x03\x03\x03x03x04\x03\x03\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x03\x04\x05'\x04\x03x01x00x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00x00x00\x00\x07\x11\x1c\'2@MZag_SB2!\x18\x10\r\n\x08\x06\x04\x02\x01\x00'

各文字のバイナリ値が必要な数値である文字列を取得しています(したがって'\x00'、これが使用している理由ですord()

しかし、あなたは走っています

 >> ''.join([hex(i) for i in intdata])
 '0x00x00x00x00x00x00x00x00x00x30xc0x1a0x310x4a0x610x6d0x720x610x4d0x330x1f0xe0x60x30x10x10x00x00x00x00x00x00x00x10x10x10x10x00x00x10x30x50x60x50x20x00x00x00x20x1c0x410x790xb10xdc0xed0xd20xa70x6e0x410x210xe0x90x60x40x40x30x20x20x20x20x10x00x20x80x250x520x8d0xcd0xf20xff0xe00xa80x6f0x3b0x220x130xc0xa0x80x60x40x20x00x00x00x00x00x10x10x20x30x20x10x00x00x00x00x00x00x00x00x00x00x00x00x00x00x20x30x30x20x00x00x00x00x20x30x70x140x2c0x550x840xa80xbb0xa30x7c0x4e0x280x160xc0x80x60x30x00x00x00x00x00x00x00x00x10x10x10x10x10x10x10x10x10x10x00x00x00x00x00x00x00xd0x280x5c0x930xc50xda0xc70xa00x6c0x420x260x160xf0xa0x70x40x30x30x30x30x40x30x30x10x00x00x00x00x00x00x00x00x00x20x30x40x50x40x30x10x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x70x110x1c0x270x320x400x4d0x5a0x610x670x5f0x530x420x320x210x180x100xd0xa0x80x60x40x20x10x0'

これは、ASCII表現を提供しています。あなたのやり方でそれを行うために使用chr()するか、他の答えの1つからの素晴らしい代替手段の1つを使用する必要があります。

于 2013-03-18T17:31:11.013 に答える