1

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

(十进制)

1416
258
-258

2189

1545

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

我的代码是:

Samples = (all the 516096 samples)
fwrite(fid1, Samples, 'int16')

它将所有整数以十六进制写入文件(使用十六进制编辑器),但每当它达到相当于 8D 的十进制整数时,它会在十六进制编辑器中将其替换为 3F。8F 变为 3F,81 变为 3F。0A 也被 0D 替换。为什么 Matlab 会这样做。我已经将它作为 int16 读入并将其写为 int16。

4

2 回答 2

0

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

于 2013-04-04T19:00:51.053 回答
0

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

由于您确实需要带符号的数字(您也有负数),因此您应该使用 32 位:

fwrite( fid1, Samples, 'int32');
于 2013-04-03T07:56:57.983 回答