文件中其他HEX项值相同
本文关键字:HEX 其他 文件 | 更新日期: 2023-09-27 17:50:53
我正在运行两个执行相同代码的程序:写入二进制文件。
当c++代码保存一个值为2的一个字节到文件时,它似乎是二进制存储为HEX 02。然而,当我的c#程序将其写入文件时,它似乎被存储为HEX 32。
可能这与字符编码UTF_16是c#中的默认值有关吗?(如果我没看错几天前的一篇文章的话)
是否有办法确保c#将字节值2写入文件为HEX 02而不是HEX 32 ?
EndianBinaryWriter writer = new EndianBinaryWriter(new FileStream("myfile.dat", Endian.Little);
char LineDepth = '4';
if(MaxDev<=127) {
LineDepth = '1';
} else
if(MaxDev<=32767) {
LineDepth = '2';
}
// write line header
//char BlockBuf[5];
//MemoryStream BlockBuf = new MemoryStream();
//EndianBinaryWriter BlockBufWriter = new EndianBinaryWriter(endian, BlockBuf);
//hfzMemcpy(BlockBuf, &LineDepth, 1); // store line depth
//hfzMemcpy(BlockBuf+1, &FirstVal, 4); // store first value (32bit precis)
writer.Write(LineDepth);
这是代码的一小部分摘录,但它应该给出了意图。我喜欢只写一个字节值为1 2或4取决于某个if语句。现在我一直认为char是一个字节所以我试着把它写成char但这似乎是错误的因为当我把它与文件进行比较时它应该是HEX 02而我的文件是HEX 32
<标题> 更新John告诉我,通过将源文件中的字节值2放入char中,我不是将值2放入该char中,而是将值32放入该char中,这导致我的结果文件损坏。有点像菜鸟犯的错误,但也许我的问题将来会对其他菜鸟有所帮助?
标题>您正在编写字符 '4', '1'或'2' -在UTF-16中编码为0x00 0x34(等)。
在我看来,你想写一个short
或ushort
值或4,1或2:
short lineDepth = 4;
if (MaxDev <= 127) {
lineDepth = 1;
} else
if (MaxDev <= 32767) {
lineDepth = 2;
}
writer.Write(lineDepth);
注意,这仍然写入两个字节。如果你只是想写一个单个字节(你的帖子和你的评论似乎说的是不同的事情),你想:
byte lineDepth = 4;
if (MaxDev <= 127) {
lineDepth = 1;
} else
if (MaxDev <= 32767) {
lineDepth = 2;
}
writer.Write(lineDepth);
理解1(整数常量)和'1'(字符常量)之间的区别非常重要。你应该尽量避免使用文本,除非你真的试图表示文本。
还要注意"hex"只是查看文件的一种方式。没有"十六进制条目"这样的东西——只有字节。因此,值为"16"的字节可以被视为16(十进制)或0x10(十六进制)。这是查看相同内容的两种不同方式。