编辑:问题是,即使指定输入 matlab 的精度,除非另行指定,否则仍会将它们转换为双精度。我的错误。
将一个简单的 64 位整数读入 matlab 似乎给出的值与我在 python 或 windows 计算器中进行转换时不同。
我有一个 8 字节长的小文件,其内容是
0x99, 0x1e, 0x6b, 0x40, 0x27, 0xe3, 0x01, 0x56
我在 matlab 中使用以下内容:
fid = fopen('test.data')
input = fread(fid, 1, 'int64')
我得到
input = 6197484319962505200
但是,使用 python 或 windows 计算器,我得到了不同的十进制表示形式 0x5601e327406b1e99
.两者都预测我应该得到 input = 6197484319962504857
(与 343 不同)。这显然不是一个字节序问题,因为那样它就会很远。
我最初被引导来测试这一点,因为从大型二进制文件中读取双精度给出了奇怪的结果。然后我尝试将它们作为整数读取并手动比较。
我的问题是,我做错了什么,是我忽略了什么,还是 matlab 在这里犯了错误?我正在使用win64 matlab R2010a。
问题似乎是fread
实际上将其作为双精度读取:
>> class(input)
ans =
double
因为这个数字太大了,所以这可能是最接近的双精度值。
如果我手动指定 matlab 变量应该int64
,除了在源文件中指定类型之外,它对我有用(请参阅文档以获取fread
):
>> input = fread(fid, 1, '*int64')
input =
6197484319962504857