如何将客户号转十六进制并填充到整数列表末尾三个元素?
解决客户号转十六进制并填充到列表的问题
嘿,我来帮你搞定这个需求!首先咱们得先理清楚例子里的字节填充逻辑:客户号250000的十六进制是0x3D090,对应到列表里是[00,00,90,d0,03]——这说明咱们需要把客户号拆成三个字节,然后**按小端序(低位字节在前)**填充到列表的最后三个位置(索引2、3、4),前两个位置固定为0。
核心思路
客户号的取值范围是1到250000,转换成十六进制最多是3个字节(250000 = 0x3D090),所以我们可以通过位运算直接提取每个字节:
- 最低8位(第一个字节):用
客户号 & 0xFF获取,放到arr[2] - 中间8位:把客户号右移8位后,再用
& 0xFF获取,放到arr[3] - 最高8位:把客户号右移16位后,再用
& 0xFF获取,放到arr[4]
代码实现(整数列表版本)
如果你的列表需要存储整数(比如0对应00,144对应90),可以用这个函数:
def convert_cust_id_to_arr(cust_id): # 初始化列表,前两个元素固定为0 arr = [0, 0, 0, 0, 0] # 提取三个字节并填充到对应位置 arr[2] = cust_id & 0xFF arr[3] = (cust_id >> 8) & 0xFF arr[4] = (cust_id >> 16) & 0xFF return arr # 测试你的例子 print(convert_cust_id_to_arr(1)) # 输出 [0, 0, 1, 0, 0] print(convert_cust_id_to_arr(2)) # 输出 [0, 0, 2, 0, 0] print(convert_cust_id_to_arr(250000)) # 输出 [0, 0, 144, 208, 3] (对应十六进制的90、D0、03)
代码实现(十六进制字符串版本)
如果需要列表元素是两位十六进制字符串(完全匹配你给出的[00,00,90,d0,03]格式),可以修改成这样:
def convert_cust_id_to_hex_str_arr(cust_id): arr = ["00", "00", "00", "00", "00"] # 格式化每个字节为两位大写十六进制字符串 arr[2] = f"{cust_id & 0xFF:02X}" arr[3] = f"{(cust_id >> 8) & 0xFF:02X}" arr[4] = f"{(cust_id >> 16) & 0xFF:02X}" return arr # 测试例子 print(convert_cust_id_to_hex_str_arr(250000)) # 输出 ['00', '00', '90', 'D0', '03']
为什么这样做?
& 0xFF的作用是保留数值的最后8位(一个字节),过滤掉更高位的内容>> 8是把数值右移8位,相当于把原来的第2个字节移到最低位,这样就能用& 0xFF提取出来- 客户号最大是250000,右移16位后最高位只有0x03,不会超过一个字节,所以完全符合需求
内容的提问来源于stack exchange,提问作者Amith PV
相关产品推荐
相关产品推荐

