我试图更好地理解二进制文件的结构。我编写了以下代码,用于将无符号8位整数写入MATLAB中的二进制文件(在Windows上)
x = uint8(2^3); % 00010000
fid = fopen('test.bin','w');
fwrite(fid, x);
fclose(fid);
然后,我去了一个十六进制编辑器并打开了文件。正如所料,我明白了
现在,我尝试编写一个两字节长的类型uint16
x = uint16(2^8); % 0000000100000000
fid = fopen('test.bin','w');
fwrite(fid, x,'uint16');
fclose(fid);
我没有看到01 00,而是看到00
答案 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.