2

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

4

1 回答 1

6

问题似乎fread是实际上将其读为双精度:

>> class(input)

ans =

  double

因为这个数字太大了,所以这可能是最接近的双精度值。

如果我手动指定 matlab 变量应该是int64,它对我有用,除了在源文件中指定类型(请参阅文档fread):

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

input =

  6197484319962504857
于 2012-04-23T21:52:26.720 回答