Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与文件中其他十六进制项的值相同_C#_C++_Character Encoding - Fatal编程技术网

C# 与文件中其他十六进制项的值相同

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

我正在运行两个程序,它们执行相同的代码:写入二进制文件

<>当C++代码保存一个值为2的字节到文件时,它似乎是二进制存储为十六进制02。然而,当我的C#程序将其写入文件时,它似乎存储为十六进制32

这可能与字符编码有关吗?在C中,UTF#16是默认值?(如果我几天前在一篇文章中读对了。)

有没有办法确保C#将字节值2作为十六进制02而不是十六进制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);
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);