将C printf(%C)转换为C#

将C printf(%C)转换为C#,c#,c,printf,C#,C,Printf,我正在尝试将这个C printf转换为C# 我试过这样的方法: int x = 65535; char[] chars = new char[2]; chars[0] = (char)(x >> 8 & 0xFF); chars[1] = (char)(x & 0xFF); 但我得到了不同的结果。 我需要将结果写入一个文件 所以我要这样做: tWriter.Write(chars); 也许这就是问题所在 谢谢 在.NET中,变量存储为无符号16位(2字节)数字,

我正在尝试将这个C printf转换为C#

我试过这样的方法:

int x = 65535;

char[] chars = new char[2];
chars[0] = (char)(x >> 8 & 0xFF);
chars[1] = (char)(x & 0xFF);
但我得到了不同的结果。 我需要将结果写入一个文件 所以我要这样做:

tWriter.Write(chars);
也许这就是问题所在

谢谢

在.NET中,变量存储为无符号16位(2字节)数字,数值范围从0到65535。所以用这个:

        int x = (int)0xA0FF;  // use differing high and low bytes for testing

        byte[] bytes = new byte[2];
        bytes[0] = (byte)(x >> 8);  // high byte
        bytes[1] = (byte)(x);       // low byte

我是通过建议得到的,并将TextWriter更改为BinaryWriter

这是密码

System.IO.BinaryWriter bw = new System.IO.BinaryWriter(System.IO.File.Open(@"C:\file.ext", System.IO.FileMode.Create));

int x = 65535;

byte[] bytes = new byte[2];
bytes[0] = (byte)(x >> 8);
bytes[1] = (byte)(x);

bw.Write(bytes);
谢谢大家。
特别是对Mitch Wheat。

如果您要使用BinaryWriter,而不仅仅是两次写入:

bw.Write((byte)(x>>8));
bw.Write((byte)x);

请记住,您刚刚执行了一个大端写。如果这是一个16位的整数,被一些期望它是小端形式的东西读取,交换写操作。

C版本会得到什么结果,C版本会得到什么结果?对于这个值->65535 C返回->C返回->我可能错了,但我认为当被解释为Windows-1252而不是UTF-8时,Ã?是ÿ的UTF-8序列。
bw.Write((byte)(x>>8));
bw.Write((byte)x);