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