二进制文件和十六进制编辑器

时间:2014-11-14 01:09:47

标签: matlab binary hex

我试图更好地理解二进制文件的结构。我编写了以下代码,用于将无符号8位整数写入MATLAB中的二进制文件(在Windows上)

x = uint8(2^3); % 00010000
fid = fopen('test.bin','w');
fwrite(fid, x);
fclose(fid);

然后,我去了一个十六进制编辑器并打开了文件。正如所料,我明白了 a busy cat

现在,我尝试编写一个两字节长的类型uint16

x = uint16(2^8); % 0000000100000000
fid = fopen('test.bin','w');
fwrite(fid, x,'uint16');
fclose(fid);

我没有看到01 00,而是看到00 .

1 个答案:

答案 0 :(得分:0)

一般情况下(0x10表示10为十六进制数,即十进制16):

 2^3 = 2³ = 8 = 0x08
 2^4 = 16 = 0x10

我不认为你做你认为你做的事。 C ^中2 ^ 3不是2 * 2 * 2(可能是你的结果中的Matlab)。

解决方案:(在C中):2 <&lt; 3&lt; 3 = 2 *(2 * 2 * 2)= 10000 = 16 = 0x10

<强>解释

在C中(不确定Matlab):

2 <&lt; 3表示:10 <&lt;&lt; 000 = 10000 = 16 = 0x10。

每个&lt;&lt; 1表示“在二进制数后加一个零”,这相当于乘以2(* 2)。这也适用于另一个方向&gt;&gt; 1与除以2(/ 2)相同。

2 ^ 3表示不是2³(指数)但是BINARY AND。

你这样做:

2 is binary 10
3 is binary 11

11&amp; 10 = 10

10
11
--
10 

One under One意味着One,Zero in One意味着0. One和One is One。零和一是零。或者更正式:( true ^ false)= false。

这可能是2 ^ 8不起作用的原因。

0010(2)&amp; 1000(8)= 0000

 0010
 1000
 ----
 0000

1下没有1,所以全部为0.