문제

확인해야합니다 string 내가받는 패킷 내부에 있습니다 byte 정렬. 내가 사용하는 경우 BitConverter.ToString(), 나는 바이트를 얻습니다 string 대시 (FE : 00-50-25-40-A5-FF).
빠른 인터넷 검색 후에 찾은 대부분의 기능을 시도했지만 대부분 입력 매개 변수 유형이 있습니다. string 그리고 내가 그들과 함께 전화한다면 string 대시를 사용하면 예외가 발생합니다.

16 진수를 바꾸는 함수가 필요합니다 (AS string 또는 AS byte) 로 string 이는 16 진수 값을 나타냅니다 (Fe : 0x31 = 1). 입력 매개 변수가있는 경우 string, 함수는 대시를 인식해야합니다 (예 : "47-61-74-65-77-61-79-53-65-72-76-65-72"). BitConverter 올바르게 변환하지 않습니다.

도움이 되었습니까?

해결책

그렇게?

static void Main()
{
    byte[] data = FromHex("47-61-74-65-77-61-79-53-65-72-76-65-72");
    string s = Encoding.ASCII.GetString(data); // GatewayServer
}
public static byte[] FromHex(string hex)
{
    hex = hex.Replace("-", "");
    byte[] raw = new byte[hex.Length / 2];
    for (int i = 0; i < raw.Length; i++)
    {
        raw[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
    }
    return raw;
}

다른 팁

string str = "47-61-74-65-77-61-79-53-65-72-76-65-72";
string[] parts = str.Split('-');

foreach (string val in parts)
{ 
    int x;
    if (int.TryParse(val, out x))
    {
         Console.Write(string.Format("{0:x2} ", x);
    }
}
Console.WriteLine();

문자열을
텍스트를 ints (int.ryparse)로 변환합니다.
int를 육각 문자열로 출력 {0 : x2}

유니 코드 지원 :

public class HexadecimalEncoding
{
    public static string ToHexString(string str)
    {
        var sb = new StringBuilder();

        var bytes = Encoding.Unicode.GetBytes(str);
        foreach (var t in bytes)
        {
            sb.Append(t.ToString("X2"));
        }

        return sb.ToString(); // returns: "48656C6C6F20776F726C64" for "Hello world"
    }

    public static string FromHexString(string hexString)
    {
        var bytes = new byte[hexString.Length / 2];
        for (var i = 0; i < bytes.Length; i++)
        {
            bytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
        }

        return Encoding.Unicode.GetString(bytes); // returns: "Hello world" for "48656C6C6F20776F726C64"
    }
}

"0x31 = 1"에 대한 귀하의 참조는 실제로 ASCII 값을 문자열로 변환하려고한다고 생각합니다.

 string hexString = "8E2";
 int num = Int32.Parse(hexString, System.Globalization.NumberStyles.HexNumber);
 Console.WriteLine(num);
 //Output: 2274

에서 https://msdn.microsoft.com/en-us/library/bb311038.aspx

바이트 배열로 결과가 필요한 경우 문자열로 변경하지 않고 직접 전달한 다음 바이트로 다시 변경해야합니다. 당신의 예에서 (fe : 0x31 = 1)는 ASCII 코드입니다. 이 경우 문자열 (16 진수)을 ASCII 값으로 변환하려면 다음을 사용합니다.Encoding.ASCII.GetString(byte[])

        byte[] data = new byte[] { 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30 };
        string ascii=Encoding.ASCII.GetString(data);
        Console.WriteLine(ascii);

콘솔이 표시됩니다 : 1234567890

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top