Matlab从存储在Matlab中的列整数向量在十六进制编辑器中写入不正确的值



我有一个516096x1矢量,数据样本都是整数十进制值,看起来像这样,但只有十进制列:

(十进制)

1416
258年
-258

2189年

1545年

我将它们存储到一个变量中。现在我想把这个变量写入二进制文件。问题是,当我将变量写入文件时,它错误地替换了某些值。

我的代码是:
Samples = (all the 516096 samples)
fwrite(fid1, Samples, 'int16')

它将用十六进制(使用十六进制编辑器)将所有整数写入文件,但每当它达到等同于8D的十进制整数时,它就会在十六进制编辑器中将其替换为3F。8F变成3F 81变成3F。a也会被替换成d。为什么Matlab会这样做。我以整数形式读进来,写成整数形式。

你正在使用有符号整型(如tashuhka所指出的),显然,16位对你来说是不够的-你有溢出。

因为你需要有符号的数字(你也有负数),你应该使用32位:

fwrite( fid1, Samples, 'int32');

好的。我想明白了。我在十六进制编辑器中使用Matlab的文本编辑器文件,它不识别那些特定的整数值,因为它们在Matlab文本编辑器中不可识别的值。因此Matlab将用自己的整数替换未知整数,即3F替换原来的8D。然后我保存了matlab创建到桌面的文件,并将其拖到十六进制编辑器中,其中显示了替换的值。它显示它们,因为您查看保存的matlab文本编辑器文件而不是实际的原始数据文件。这些文件与你的代码、脚本、函数等放在同一个目录下。将创建的文件保存到某个目录后,请确保使用该目录中的文件。

最新更新