如何仅使用位运算将整数转换为指定长度的字节?
仅用位运算实现整数到字节的转换
给定两个参数:i(整数)、length(需要编码的字节长度),要仅通过位运算完成整数到字节的转换,以下是完善后的函数实现:
实现思路
整数转字节的核心是把整数的二进制位按8位一组拆分,每个组对应一个字节。用位运算可以直接提取每组的数值:
- 对每个字节位置,先将整数右移对应位数,把目标字节移到最低8位
- 再用
0xFF(二进制11111111)和移位后的结果按位与,过滤掉高位,只保留当前字节的数值
完善后的代码
def int_to_bytes(i, length): result = bytearray() for n in range(length): # 把目标字节移到最低8位:右移n*8位,n是当前处理的字节索引(从0开始) shifted_num = i >> (n * 8) # 提取最低8位的数值,得到单个字节的取值 byte_value = shifted_num & 0xFF result.append(byte_value) # 如果需要大端序(高字节在前),就把结果反转 # result = result[::-1] return bytes(result)
补充说明
- 上述代码默认生成小端序的字节串(低字节在前),如果需要大端序,取消注释最后一行的反转代码即可
- 位运算细节:
>>右移操作:将整数的二进制位整体右移,负数会补符号位,若处理无符号整数,结果更符合预期& 0xFF:仅保留数值的最低8位,高位全部置0,刚好对应一个字节的取值范围(0-255)
内容的提问来源于stack exchange,提问作者haruhi
相关产品推荐
相关产品推荐

