C#逆转了ushort

时间:2012-06-27 18:20:32

标签: c# .net sockets endianness

我目前遇到一些Socket问题。

我想要的输出是0x5801,其反转为0x0158,实际上是344为ushort。

ushort t = 344;
p.WriteString("\x58\x01", false);

我现在想要变量而不是硬编码的十六进制。我已经尝试了一些ReverseBit类等等,但没有真正有效。

感谢您的帮助!

4 个答案:

答案 0 :(得分:6)

使用WriteString而非开始。你想写二进制数据,对吧?所以要么使用WriteShort要么直接写字节。

你没有提供太多信息(比如p的类型,或者这个数据的意思)但如果这是一个字节序问题,你可以考虑使用我的{{3其中EndianBinaryWriterEndianBinaryReader类似于框架BinaryWriterBinaryReader类,但能够指定字节顺序。

答案 1 :(得分:2)

听起来像是IPAddress.HostToNetworkOrderNetworkOrderToHost

http://msdn.microsoft.com/en-us/library/fw3e4a0f

答案 2 :(得分:1)

我认为这就是你要做的事情:

ushort t = 344;
var b = BitConverter.GetBytes(t);
if (!BitConverter.IsLittleEndian)
    Array.Reverse(b);
//write b

答案 3 :(得分:1)

BitConverter.GetBytes方法返回的字节顺序取决于计算机体系结构的字节顺序;然而,BitConverter.ToString的字节预期的顺序也是如此,这意味着如果在同一台机器上执行这两个操作,则不必执行任何手动反转。

ushort t = 344;
byte[] bytes = BitConverter.GetBytes(t);
string hex = BitConverter.ToString(bytes);
hex = hex.Replace("-", "");
p.WriteString(hex);