C# 与文件中其他十六进制项的值相同
我正在运行两个程序,它们执行相同的代码:写入二进制文件 <>当C++代码保存一个值为2的字节到文件时,它似乎是二进制存储为十六进制02。然而,当我的C#程序将其写入文件时,它似乎存储为十六进制32 这可能与字符编码有关吗?在C中,UTF#16是默认值?(如果我几天前在一篇文章中读对了。) 有没有办法确保C#将字节值2作为十六进制02而不是十六进制32写入文件C# 与文件中其他十六进制项的值相同,c#,c++,character-encoding,C#,C++,Character Encoding,我正在运行两个程序,它们执行相同的代码:写入二进制文件 当C++代码保存一个值为2的字节到文件时,它似乎是二进制存储为十六进制02。然而,当我的C#程序将其写入文件时,它似乎存储为十六进制32 这可能与字符编码有关吗?在C中,UTF#16是默认值?(如果我几天前在一篇文章中读对了。) 有没有办法确保C#将字节值2作为十六进制02而不是十六进制32写入文件 EndianBinaryWriter writer = new EndianBinaryWriter(new File
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);
EndianBinaryWriter=newendianbinarywriter(newfilestream(“myfile.dat”,Endian.Little));
char LineDepth='4';
如果(MaxDev您正在写入字符“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);
短线深度=4;
如果(MaxDev几乎可以肯定,这与您在两种语言中使用的代码有关……但您没有发布任何一段代码。再说一次,您谈论的是二进制文件,而谈论的是chars,这表明您应该非常仔细地考虑这到底是文本还是二进制。C对此可能有矛盾:C#不是。您是否碰巧将字符“2”(与整数值2相反)写入了C#中的文件?32是“2”的ascii字符代码。@Jon SKeet:我用code@Anderas:我只想写一个值为1、2或4的字节(在本例中为2)我会试试看结果,但我认为短的是2个字节,而我只想写一个字节,两个字节可能会破坏文件格式。我会给出结果shortly@kenny:如果你只想写一个字节,为什么你的问题会说:“有没有办法确保C#将2个字符写入文件?”?请看我的单字节版本的编辑…请考虑如何在将来使您的问题更清楚。如果字节
版本证明是您想要的,我将编辑掉简短
部分。完全正确,我的措辞完全混乱。我实际上是一名java开发人员,我正在迷失在语言中。我完全正确忘记了字节数据类型。我将源文件中读取的一个字节强制转换为字符,以确保我有一个字节,然后写入该字符,完全忘记了我实际上还没有值2作为字节,而是值32。更新了我的问题,使其更清楚
byte lineDepth = 4;
if (MaxDev <= 127) {
lineDepth = 1;
} else
if (MaxDev <= 32767) {
lineDepth = 2;
}
writer.Write(lineDepth);