如何在常规字符串中保留ASCII值?整数转高低位消息存储问题
解决整数转高低位十六进制字符串并追加到列表的问题
看起来你是想把整数拆分出的高低位字符,转换成两位十六进制字符串格式(比如整数10的高位0对应'00',低位10对应'0A'),再追加到指定列表末尾对吧?原函数返回的是字符本身的字符串形式(比如'\x00'、'\n'),这确实没法直接满足你的需求,我们可以调整转换逻辑来实现。
方案一:直接修改原函数返回十六进制字符串
我们可以直接在函数里计算高低位的十进制值,然后格式化为两位十六进制字符串:
def int2message(integer): # 计算高低位的十进制数值 high_byte = integer // 256 low_byte = integer % 256 # 格式化为两位十六进制字符串(大写,想要小写就把X改成x) message_high = f"{high_byte:02X}" message_low = f"{low_byte:02X}" return [message_high, message_low]
测试一下这个函数:
test_value = int2message(10) print(test_value) # 输出 ['00', '0A']
然后把结果追加到你的目标列表里:
# 你的原始列表 original_list = ['0xA2', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # 获取高低位十六进制字符串 high_low_pairs = int2message(10) # 追加到列表末尾 original_list.extend(high_low_pairs) print(original_list)
运行后就能得到你想要的格式:
['0xA2', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '00', '0A']
方案二:保留原函数,后续处理结果转十六进制
如果你不想修改原函数,也可以在获取字符结果后,通过ord()函数拿到字符的ASCII值,再转成十六进制:
def int2message(integer): messageHigh=chr(integer//256) messageLow=chr(integer%256) return [str(messageHigh), str(messageLow)] # 处理结果 test_value = int2message(10) # 把字符转成对应的两位十六进制字符串 high_hex = f"{ord(test_value[0]):02X}" low_hex = f"{ord(test_value[1]):02X}" # 追加到列表 original_list = ['0xA2', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] original_list.extend([high_hex, low_hex]) print(original_list)
这个方案也能得到和上面一样的结果,看你更习惯哪种实现方式。
内容的提问来源于stack exchange,提问作者Cristina
相关产品推荐
相关产品推荐

