2016-10-28 5 views
0

특히 불행히도 오래된 Python 2.4에서는 길이를 16 진수 값으로 변환해야합니다. 길이 1은 '\ x00 \ x01'이고 길이 65535는 '\ xFF \ xFF'입니다. 2 바이트의 공간을 채우는 I이 16 진수 문자열 표현으로 임의 개수 < = 65535을 변환하는 방법을 제외하고 상기와 같은 사전 않아도문자열의 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 

,?

답변을 기다리는 동안 발견 한 Linuxios 덕분에 나는 세 가지 방법을 발견했습니다. 구조체 가져 오기가 싫은 이유가 아니라면 Linuxios의 답변이 가장 좋습니다.

답변

1
파이썬의 내장 struct 패키지 사용

: 예를 들어

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

struct.pack(">H", 1)'\x00\x01' 제공하고 struct.pack(">H", 65535)'\xff\xff'을 제공합니다.

+0

그건 멋진 ... – user2725742

+0

@ user2725742 : 다행입니다! – Linuxios