我目前遇到了一些 Socket 的问题。
我想要的输出是0x5801
,它的反转0x0158
实际上是 344 作为 ushort。
ushort t = 344;
p.WriteString("\x58\x01", false);
我现在想要变量而不是硬编码的十六进制。我已经尝试过一些 ReverseBit 类等等,但没有任何效果。
谢谢你的帮助!
我目前遇到了一些 Socket 的问题。
我想要的输出是0x5801
,它的反转0x0158
实际上是 344 作为 ushort。
ushort t = 344;
p.WriteString("\x58\x01", false);
我现在想要变量而不是硬编码的十六进制。我已经尝试过一些 ReverseBit 类等等,但没有任何效果。
谢谢你的帮助!
从不使用开始WriteString
。你想写二进制数据,对吧?因此,要么直接使用字节,要么WriteShort
直接写入字节。
您没有提供太多可使用的信息(例如 的类型p
,或此数据要表示的内容),但如果这是字节序问题,您可以考虑使用我的MiscUtil,它具有框架EndianBinaryWriter
和类,但具有指定字节顺序的能力。EndianBinaryReader
BinaryWriter
BinaryReader
听起来像你想要IPAddress.HostToNetworkOrder
和NetworkOrderToHost
我认为这就是你想要做的:
ushort t = 344;
var b = BitConverter.GetBytes(t);
if (!BitConverter.IsLittleEndian)
Array.Reverse(b);
//write b
该BitConverter.GetBytes
方法返回的字节顺序取决于您的计算机体系结构的字节序;但是,预期的字节顺序也是如此BitConverter.ToString
,这意味着如果两个操作都在同一台机器上执行,您不必执行任何手动反转。
ushort t = 344;
byte[] bytes = BitConverter.GetBytes(t);
string hex = BitConverter.ToString(bytes);
hex = hex.Replace("-", "");
p.WriteString(hex);