2011-07-31 7 views
0

UDP 패킷의 처음 5 바이트를 두 개의 정의와 비교해야하며 일치하는 경우 그에 따라 작동해야합니다. 그러나 이것이 분명히 작동하지 않을 것이기 때문에 어떻게 이것을 표현해야합니까?바이트를 16 진수로 비교 하시겠습니까?

주석 처리 된 줄은 내가 원래하는 방식이지만 매우 효율적이지는 않습니다.

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; 
} 
+0

우선, 다음과 같이 배열을 만드는 것이 어떻습니까? 'new byte [] {0xFF, 0xFF, 0xFF, 0x54}' –

답변

2

당신은 바이트 배열 쉽게 입력 할 수 있습니다 :

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

고마워! 항상 일을 복잡하게해야 해. –

0

나는 긴 (System.Int64)에 5 바이트로 변환하는 것이 좋습니다 것입니다. 그렇게하면 스위치/케이스를 사용하여 요청을 보낼 수도 있습니다.

관련 문제