【问题标题】:Comparing Bytes to Hex?将字节与十六进制进行比较?
【发布时间】:2011-10-16 21:25:48
【问题描述】:

我需要将 UDP 数据包的前 5 个字节与两个定义进行比较,如果匹配,则对它们进行相应的处理。但是,我应该如何为此表示十六进制,因为这显然不会/不起作用?

注释行是我原来的做法,但效率不高。

private static void HandleQuery(Socket socket, EndPoint Remote)
{
    byte[] A2S_INFO_REQUEST = StringToByteArray("\xFF\xFF\xFF\xFF\x54");
    byte[] A2S_PLAYER = StringToByteArray("\xFF\xFF\xFF\xFF\x55");

    byte[] data = new byte[1400];
    int recv = socket.ReceiveFrom(data, ref Remote);

    // A2S_INFO QUERY
    //if (recv == 25 && data[4] == 84)
    if (CompareByteArray(A2S_INFO_REQUEST, data, 5))
    {
        ReplyInfoQuery(socket, Remote);
    }

    // A2S_PLAYER QUERY
    //if (recv == 9)
    if (CompareByteArray(A2S_PLAYER, data, 5))
    {
        ReplyPlayerQuery(socket, Remote);
    }
}

private static byte[] StringToByteArray(String hex)
{
    int NumberChars = hex.Length;
    byte[] bytes = new byte[NumberChars / 2];
    for (int i = 0; i < NumberChars; i += 2)
    bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
    return bytes;
}

private static bool CompareByteArray(byte[] a1, byte[] a2, int len)
{
    for (int i = 0; i < len; i++)
    {
        if (a1[i] != a2[i])
        {
            return false;
        }
    }

    return true;
}

【问题讨论】:

  • 首先,为什么不像这样创建数组:new byte[] {0xFF, 0xFF, 0xFF, 0xFF, 0x54}

标签: c# .net sockets bytearray hex


【解决方案1】:

您可以更轻松地填充字节数组:

//byte[] A2S_PLAYER = StringToByteArray("\xFF\xFF\xFF\xFF\x55");
byte[] A2S_PLAYER = new byte[] {0xFF, 0xFF, 0xFF, 0xFF, 0x55} ;

【讨论】:

    【解决方案2】:

    我建议将您的 5 个字节转换为 long (System.Int64)。这样你甚至可以使用 switch/case 来调度你的请求。

    【讨论】:

      猜你喜欢
      • 2021-08-26
      • 2013-05-24
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多