我目前遇到一些Socket问题。
我想要的输出是0x5801
,其反转为0x0158
,实际上是344为ushort。
ushort t = 344;
p.WriteString("\x58\x01", false);
我现在想要变量而不是硬编码的十六进制。我已经尝试了一些ReverseBit类等等,但没有真正有效。
感谢您的帮助!
答案 0 :(得分:6)
使用WriteString
从而非开始。你想写二进制数据,对吧?所以要么使用WriteShort
要么直接写字节。
你没有提供太多信息(比如p
的类型,或者这个数据的意思)但如果这是一个字节序问题,你可以考虑使用我的{{3其中EndianBinaryWriter
和EndianBinaryReader
类似于框架BinaryWriter
和BinaryReader
类,但能够指定字节顺序。
答案 1 :(得分:2)
听起来像是IPAddress.HostToNetworkOrder
和NetworkOrderToHost
答案 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);