【问题标题】:C# reversed ushortC# 反转 ushort
【发布时间】:2012-06-27 18:20:32
【问题描述】:

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

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

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

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

感谢您的帮助!

【问题讨论】:

  • 什么是p?您是否尝试过使用BinaryWriterBinaryReader?他们会处理这类问题。

标签: c# .net sockets endianness


【解决方案1】:

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

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

【讨论】:

  • 嘿,p 是一个自定义类,它连续添加字符串,以供数据包使用。
  • @Moritz:所以你的意思是你没有向我们展示的课程不能按你的意愿工作?您希望我们如何帮助您?
  • (大概你已经接受了我的回答这一事实表明它在某种程度上有所帮助......)
【解决方案2】:

听起来你想要IPAddress.HostToNetworkOrderNetworkOrderToHost

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-06-24
        • 1970-01-01
        • 2011-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-06
        相关资源
        最近更新 更多