C# 将字节与十六进制进行比较?

C# 将字节与十六进制进行比较?,c#,.net,sockets,bytearray,hex,C#,.net,Sockets,Bytearray,Hex,我需要将UDP数据包的前5个字节与两个定义进行比较,如果它与一个定义相匹配,则对它们进行相应的操作。然而,既然这显然不起作用,我应该如何表示十六进制呢 注释行是我最初的方式,但不是很有效 private static void HandleQuery(Socket socket, EndPoint Remote) { byte[] A2S_INFO_REQUEST = StringToByteArray("\xFF\xFF\xFF\xFF\x54"); byte[] A2S_PL

我需要将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;
}
private static void HandleQuery(套接字、端点远程)
{
字节[]A2S_INFO_REQUEST=StringToByteArray(“\xFF\xFF\xFF\xFF\x54”);
字节[]A2S_PLAYER=StringToByteArray(“\xFF\xFF\xFF\xFF\x55”);
字节[]数据=新字节[1400];
int recv=插座。接收自(数据,参考远程);
//A2S_信息查询
//if(recv==25&&data[4]==84)
if(比较字节数组(A2S\U信息请求,数据,5))
{
ReplyInfo查询(套接字,远程);
}
//A2S_播放器查询
//如果(recv==9)
if(比较字节数组(A2S_播放器,数据,5))
{
ReplyPlayerQuery(套接字,远程);
}
}
私有静态字节[]StringToByteArray(字符串十六进制)
{
int numbercars=十六进制长度;
字节[]字节=新字节[numbercars/2];
对于(int i=0;i
您可以更轻松地填充字节数组:

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

我建议将5个字节转换为长格式(System.Int64)。这样,您甚至可以使用开关/案例来分派请求。

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