文件中其他HEX项值相同
Same value other HEX entries in file
我正在运行两个执行相同代码的程序:写入二进制文件。
当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(十六进制)。这是查看相同内容的两种不同方式。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- HEX值到wchar_t字符(UTF-8)的转换
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 在其他文件中创建类时在 c++ 项目中不起作用
- 类与私有变量的其他类之间的线程安全性
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- GlobalAlloc而不是其他分配方法
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 结构和双指针隐藏在其他结构中,多层混淆
- UE4在OnComponentBeginOverlap上铸造其他actor
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- MESI协议和std::atomic-它是否确保所有写入立即对其他线程可见?
- 保留对其他类的成员函数的引用
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 文件中其他HEX项值相同