0

我目前遇到了一些 Socket 的问题。

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

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

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

谢谢你的帮助!

4

4 回答 4

6

从不使用开始WriteString。你想写二进制数据,对吧?因此,要么直接使用字节,要么WriteShort直接写入字节。

您没有提供太多可使用的信息(例如 的类型p,或此数据要表示的内容),但如果这是字节序问题,您可以考虑使用我的MiscUtil,它具有框架EndianBinaryWriter和类,但具有指定字节顺序的能力。EndianBinaryReaderBinaryWriterBinaryReader

于 2012-06-27T18:22:38.493 回答
2

听起来像你想要IPAddress.HostToNetworkOrderNetworkOrderToHost

http://msdn.microsoft.com/en-us/library/fw3e4a​​0f

于 2012-06-27T18:25:02.947 回答
1

我认为这就是你想要做的:

ushort t = 344;
var b = BitConverter.GetBytes(t);
if (!BitConverter.IsLittleEndian)
    Array.Reverse(b);
//write b
于 2012-06-27T18:23:41.007 回答
1

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

ushort t = 344;
byte[] bytes = BitConverter.GetBytes(t);
string hex = BitConverter.ToString(bytes);
hex = hex.Replace("-", "");
p.WriteString(hex);
于 2012-06-27T18:33:32.277 回答