Python 2中无字符串方式将整数拆分转换为字节
整数转字节序列(无字符串处理方案)
嘿,我懂你想把整数直接拆成字节数值的需求,还不想用hex()这类字符串相关的方法对吧?这事儿用Python的内置方法或者手动位运算就能轻松搞定,完全不碰字符串操作,给你两种实用方案:
方案1:用整数内置方法to_bytes()(最简洁)
这个方法是Python整数自带的,专门用来把整数转换成字节序列,核心逻辑完全和字符串处理无关:
num = 77121980 # 转换为4字节的大端序字节序列,再转成元组 byte_tuple = tuple(num.to_bytes(4, byteorder='big')) print(byte_tuple) # 输出:(4, 152, 201, 188) # 如果需要十六进制格式的结果,只是对数值做格式展示,核心转换仍无字符串处理 hex_byte_tuple = tuple(f"0x{b:02x}" for b in num.to_bytes(4, byteorder='big')) print(hex_byte_tuple) # 输出:('0x04', '0x98', '0xc9', '0xbc')
小提示:
byteorder='big'表示大端序(高位字节在前),如果需要小端序可以改成byteorder='little';- 如果不确定需要多少字节,可以用
(num.bit_length() + 7) // 8自动计算最少需要的字节数,对77121980来说,这个结果正好是4。
方案2:手动位运算(理解底层原理)
如果想搞清楚底层逻辑,用位运算手动提取每个字节也很简单,原理是通过右移和按位与来截取每个8位的字节:
num = 77121980 # 大端序:从最高位到最低位依次提取每个字节 byte1 = (num >> 24) & 0xFF # 右移24位后取低8位 byte2 = (num >> 16) & 0xFF # 右移16位后取低8位 byte3 = (num >> 8) & 0xFF # 右移8位后取低8位 byte4 = num & 0xFF # 直接取低8位 result_tuple = (byte1, byte2, byte3, byte4) print(result_tuple) # 输出:(4, 152, 201, 188) # 同样可以转成十六进制格式的元组 hex_result_tuple = tuple(f"0x{b:02x}" for b in result_tuple) print(hex_result_tuple) # 输出:('0x04', '0x98', '0xc9', '0xbc')
这两种方案都完全避开了字符串处理,都是直接对整数进行数值操作,完美符合你的需求~
内容的提问来源于stack exchange,提问作者Ruvalcaba




