2016-10-28 18 views
0

特にPython 2.4では、残念ながら古いですが、長さを16進数に変換する必要があります。長さ1は '\ x00 \ x01'、長さ65535は '\ xFF \ xFF'となります。別に上記のような辞書を有するから文字列の16進値を16進数値のASCII文字に変換する

import struct 

hexdict = {'0':'\x00\x00', '1':'\x00\x01', '2':'\x00\x02', '3':'\x00\x03', '4':'\x00\x04', '5':'\x00\x05', '6':'\x00\x06', '7':'\x00\x07', '8':'\x00\x08', '9':'\x00\x09', 'a':'\x00\x0a', 'b':'\x00\x0b', 'c':'\x00\x0c', 'd':'\x00\x0d', 'e':'\x00\x0e', 'f':'\x00\x0f'} 



def convert(int_value): # Not in original request 
    encoded = format(int_value, 'x') 
    length = len(encoded) 
    encoded = encoded.zfill(length+length%2) 
    retval = encoded.decode('hex') 
    if x < 256: 
     retval = '\x00' + retval 
    return retval 



for x in range(16): 
    print hexdict[str(hex(x)[-1])] # Original, terrible method 
    print convert(x) # Slightly better method 
    print struct.pack(">H", x) # Best method 

、どのように空間の2バイトを充填し、この16進文字列表現に任意の数< = 65535を変換することができますか?

Linuxiosのおかげで、その答えを待っている間に私が見つけた答え、私はこれを行う3つの方法を見つけました。明らかに、何らかの理由でstructをインポートすることが望ましくない限り、Linuxiosの答えは最高です。 Pythonのビルトインstructパッケージ使用

答えて

1

:たとえば

import struct 
struct.pack(">H", x) 

を、struct.pack(">H", 1)'\x00\x01'を与え、struct.pack(">H", 65535)'\xff\xff'を与えます。

+0

それは素敵です... – user2725742

+0

@ user2725742:嬉しいです! – Linuxios

関連する問題