You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

64位整数转十六进制结果不符,求原因及Modbus场景解决方法

问题分析与解决

差异原因

问题出在int(int_val / 256)这行代码:
Python 3中/是浮点数除法,而双精度浮点数(Python的float类型)仅能精确表示253以内的整数。你的原始整数`6074967776560871829`远大于253(约9×10¹⁵),转换为浮点数时会丢失精度,导致除法后的结果不准确,最终使得第二个字节的计算出现偏差(本该是0xf9,却因精度丢失变成0xf8)。

修改方案

将浮点数除法替换为整数除法运算符//,它直接对整数执行整除操作,不会涉及浮点数转换,能完整保留大整数的精度:

修改后的代码:

int_val = 6074967776560871829
hex_val = []
for i in range(0,8):
    hex_val.append(hex(int_val % 256))
    int_val = int_val // 256  # 用整数除法替代浮点数除法
print(hex_val)

运行后会得到预期结果:

['0x95', '0xf9', '0xda', '0x97', '0x1', '0x9f', '0x4e', '0x54']

更简洁的实现方式

也可以利用Python内置的int.to_bytes方法直接完成转换,代码更简洁且不易出错(byteorder='little'对应你代码中的小端序,低位字节在前):

int_val = 6074967776560871829
bytes_val = int_val.to_bytes(8, byteorder='little')
hex_val = [hex(b) for b in bytes_val]
print(hex_val)

内容的提问来源于stack exchange,提问作者Nav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 07:53:20