在Matlab中从二进制文件中读取64位整数不会给出正确的结果

时间:2012-04-23 21:21:13

标签: matlab

编辑:问题是,即使指定输入的精度,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。

1 个答案:

答案 0 :(得分:6)

问题似乎是fread实际上是以双重的方式阅读它:

>> class(input)

ans =

  double

因为数字太大,所以可能是最接近的双重值。

如果我手动指定matlab变量应该是int64,除了在源文件中指定类型(参见the documentation for fread)之外,它对我有用:

>> input = fread(fid, 1, '*int64')

input =

  6197484319962504857