【发布时间】:2021-07-08 10:38:57
【问题描述】:
上下文
我有一个将数据输出到文件中并通过校验和验证数据的应用程序。虽然Python 3.8.0 32bit 一切正常,但我观察到Python 3.8.4 64bit 生成了不同的校验和。根据错误转储的数据,我相信我已将其范围缩小到此代码(因为失败的文件是唯一使用此功能的文件)。
此方法的目的是取一个值,0-65535,并将其拆分为两个单独的“字节”。
def integer_to_lsb_msb(value: int) -> List[int]:
if value < 0 or value > 65535:
raise ValueError("The input value does not qualify as a '16bit' value", value)
lsb = value & 0xFF
msb = ((value >> 8) & 0xFF)
return [lsb, msb]
问题
python 不是以独立于架构的方式处理代码吗?如果没有,有没有办法检查架构并运行自定义代码以确保 32 位和 64 位版本的输出相同?
【问题讨论】:
-
那么向我们展示一个输入,其中两个不同的 Python 版本使用此函数给出不同的结果?
-
Python 的按位运算符是整数运算符,而不是计算机字 - 所以我怀疑您是否有一个将整数发送到整数列表并在不同架构上返回不同值的函数示例。我的猜测是,您所看到的更多地与您 do 对返回值的操作有关(在您未显示的代码中)。如果没有minimal reproducible example,就很难说更多了。
-
问题的重点不是你解释的那样。我的代码根据我使用的是 32 位还是 64 位版本的 python 生成不同的输出。因此,问题是关于 python 解释器的规则以及这个肩膀是否曾经是这种情况。
-
A minimal reproducible example 将包含一个在不同版本上生成不同输出的短程序。您发布的代码似乎缺少该属性。是否有特定的
valueprint(integer_to_lsb_msb(value))在不同的机器上打印不同的东西?如果没有,你为什么还要发布这个功能? -
您是否在代码中使用
bytes对象?像int.from_bytes这样的方法涉及底层细节,在不同的架构上可能表现不同。
标签: python