matlab - 在Matlab中从二进制文件读取64位整数没有给出正确的结果

标签 matlab

编辑:问题是,即使指定输入的精度,matlab 仍然会将它们转换为 double ,除非您另外指定。我的错误。

将一个简单的 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)。显然这不是一个字节顺序问题,因为那样的话就大错特错了。

我最初被引导去测试这个,因为从一个大的二进制文件中读取 double 会给出奇怪的结果。然后我尝试将它们作为整数读取并手动比较。

我的问题是,我是否做错了什么,是否有我忽略的事情,或者matlab在这里犯了错误?我使用的是 win64 matlab R2010a。

最佳答案

问题似乎是 fread 实际上将其作为 double 读取:

>> class(input)

ans =

  double

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

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

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

input =

  6197484319962504857

关于matlab - 在Matlab中从二进制文件读取64位整数没有给出正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10288517/

相关文章:

matlab - 当 RAM 已满时中止 MATLAB 代码

matlab - 如果截断,为什么从内核分布生成的随机数会慢 1000 倍?

matlab - Matlab 上的对数最小二乘法

matlab - Matlab:将日期字符串转换为datenum慢吗?

Matlab GUI,如何从子图返回到单个图?

matlab - 如何在 MATLAB 中有效地查找和合并向量的重复条目?

image - 有没有办法直接找出数字图像的 "smoothness"?

matlab - 将图形保存为 pdf 打印 # 而不是标题中的选项卡

c++ - 在没有地址的函数中使用指针

user-interface - MATLAB gui创建者GUIDE是否像我想的那样糟糕?还有其他选择吗?