(题目有点勉强,不过问题真的很难描述,希望Google/Baidu到这里的童鞋不要失望) 前几天给zwwooooo写一个 小工具,其中遇到一个输入的问题。具体描述就是:“输入4个16进制的数字,如'00a0’,输入之后必须能够把这个输入给保存到文件中存为2进制格式,必须是原始的 16进制,而不是字符串类型。如’x00xa0’"。(其实这是用在处理文本上的) 不知道各位大大有没有明白我的意思,我花了很长时间没有一个好的解决方案。 第一种方案,先用int()转换,然后转换hex(),直接失败,hex()转换后格式为'0x00a0’,是字符串格式,根本不是我需要的内容。 我苦思冥想三天,终于找到一个最傻,也最好用的方法,用list进行匹配。 下面是生成匹配list的脚本:

lst = '{'
for i in range(int('0x00', 16), int('0xff', 16) + 1):
    hv = hex(i).replace('0x', '')
    if len(hv) == 1:
        hv = '0' + hv
    lst += ''' + hv + '': '\x' + hv + '', '
lst += '}'
print lst

下面是生成的list:

{'00': 'x00', '01': 'x01', '02': 'x02', '03': 'x03', '04': 'x04', '05': 'x05', '06': 'x06', '07': 'x07', '08': 'x08', '09': 'x09', '0a': 'x0a', '0b': 'x0b', '0c': 'x0c', '0d': 'x0d', '0e': 'x0e', '0f': 'x0f', '10': 'x10', '11': 'x11', '12': 'x12', '13': 'x13', '14': 'x14', '15': 'x15', '16': 'x16', '17': 'x17', '18': 'x18', '19': 'x19', '1a': 'x1a', '1b': 'x1b', '1c': 'x1c', '1d': 'x1d', '1e': 'x1e', '1f': 'x1f', '20': 'x20', '21': 'x21', '22': 'x22', '23': 'x23', '24': 'x24', '25': 'x25', '26': 'x26', '27': 'x27', '28': 'x28', '29': 'x29', '2a': 'x2a', '2b': 'x2b', '2c': 'x2c', '2d': 'x2d', '2e': 'x2e', '2f': 'x2f', '30': 'x30', '31': 'x31', '32': 'x32', '33': 'x33', '34': 'x34', '35': 'x35', '36': 'x36', '37': 'x37', '38': 'x38', '39': 'x39', '3a': 'x3a', '3b': 'x3b', '3c': 'x3c', '3d': 'x3d', '3e': 'x3e', '3f': 'x3f', '40': 'x40', '41': 'x41', '42': 'x42', '43': 'x43', '44': 'x44', '45': 'x45', '46': 'x46', '47': 'x47', '48': 'x48', '49': 'x49', '4a': 'x4a', '4b': 'x4b', '4c': 'x4c', '4d': 'x4d', '4e': 'x4e', '4f': 'x4f', '50': 'x50', '51': 'x51', '52': 'x52', '53': 'x53', '54': 'x54', '55': 'x55', '56': 'x56', '57': 'x57', '58': 'x58', '59': 'x59', '5a': 'x5a', '5b': 'x5b', '5c': 'x5c', '5d': 'x5d', '5e': 'x5e', '5f': 'x5f', '60': 'x60', '61': 'x61', '62': 'x62', '63': 'x63', '64': 'x64', '65': 'x65', '66': 'x66', '67': 'x67', '68': 'x68', '69': 'x69', '6a': 'x6a', '6b': 'x6b', '6c': 'x6c', '6d': 'x6d', '6e': 'x6e', '6f': 'x6f', '70': 'x70', '71': 'x71', '72': 'x72', '73': 'x73', '74': 'x74', '75': 'x75', '76': 'x76', '77': 'x77', '78': 'x78', '79': 'x79', '7a': 'x7a', '7b': 'x7b', '7c': 'x7c', '7d': 'x7d', '7e': 'x7e', '7f': 'x7f', '80': 'x80', '81': 'x81', '82': 'x82', '83': 'x83', '84': 'x84', '85': 'x85', '86': 'x86', '87': 'x87', '88': 'x88', '89': 'x89', '8a': 'x8a', '8b': 'x8b', '8c': 'x8c', '8d': 'x8d', '8e': 'x8e', '8f': 'x8f', '90': 'x90', '91': 'x91', '92': 'x92', '93': 'x93', '94': 'x94', '95': 'x95', '96': 'x96', '97': 'x97', '98': 'x98', '99': 'x99', '9a': 'x9a', '9b': 'x9b', '9c': 'x9c', '9d': 'x9d', '9e': 'x9e', '9f': 'x9f', 'a0': 'xa0', 'a1': 'xa1', 'a2': 'xa2', 'a3': 'xa3', 'a4': 'xa4', 'a5': 'xa5', 'a6': 'xa6', 'a7': 'xa7', 'a8': 'xa8', 'a9': 'xa9', 'aa': 'xaa', 'ab': 'xab', 'ac': 'xac', 'ad': 'xad', 'ae': 'xae', 'af': 'xaf', 'b0': 'xb0', 'b1': 'xb1', 'b2': 'xb2', 'b3': 'xb3', 'b4': 'xb4', 'b5': 'xb5', 'b6': 'xb6', 'b7': 'xb7', 'b8': 'xb8', 'b9': 'xb9', 'ba': 'xba', 'bb': 'xbb', 'bc': 'xbc', 'bd': 'xbd', 'be': 'xbe', 'bf': 'xbf', 'c0': 'xc0', 'c1': 'xc1', 'c2': 'xc2', 'c3': 'xc3', 'c4': 'xc4', 'c5': 'xc5', 'c6': 'xc6', 'c7': 'xc7', 'c8': 'xc8', 'c9': 'xc9', 'ca': 'xca', 'cb': 'xcb', 'cc': 'xcc', 'cd': 'xcd', 'ce': 'xce', 'cf': 'xcf', 'd0': 'xd0', 'd1': 'xd1', 'd2': 'xd2', 'd3': 'xd3', 'd4': 'xd4', 'd5': 'xd5', 'd6': 'xd6', 'd7': 'xd7', 'd8': 'xd8', 'd9': 'xd9', 'da': 'xda', 'db': 'xdb', 'dc': 'xdc', 'dd': 'xdd', 'de': 'xde', 'df': 'xdf', 'e0': 'xe0', 'e1': 'xe1', 'e2': 'xe2', 'e3': 'xe3', 'e4': 'xe4', 'e5': 'xe5', 'e6': 'xe6', 'e7': 'xe7', 'e8': 'xe8', 'e9': 'xe9', 'ea': 'xea', 'eb': 'xeb', 'ec': 'xec', 'ed': 'xed', 'ee': 'xee', 'ef': 'xef', 'f0': 'xf0', 'f1': 'xf1', 'f2': 'xf2', 'f3': 'xf3', 'f4': 'xf4', 'f5': 'xf5', 'f6': 'xf6', 'f7': 'xf7', 'f8': 'xf8', 'f9': 'xf9', 'fa': 'xfa', 'fb': 'xfb', 'fc': 'xfc', 'fd': 'xfd', 'fe': 'xfe', 'ff': 'xff', }

其实看这个list,可以发现,其实是对字符串进行替换,使其对应到各自的原始16进制表示方式。 我刚学Python不足一个月,这只是我曲线救国的方法,求教更好的方法。


原文链接: Python输入16进制保存到文件 | Log4D

3a1ff193cee606bd1e2ea554a16353ee

欢迎关注我的微信公众号:窥豹

窥豹