string a = "0152656420616E540000000000000000000041006400000000000000095B5265445D4E614461000000000000000148016400000000000000"a里面的是16进制数据  
怎么吧a 转化成 中文 呢??

解决方案 »

  1.   

    string a = "0152656420616E540000000000000000000041006400000000000000095B5265445D4E614461000000000000000148016400000000000000";            byte[] bytes = new byte[a.Length / 2];            int i = 0,r = 0;            
                while (i < a.Length)
                {
                    bytes[r] = byte.Parse(a.Substring(i, 2), System.Globalization.NumberStyles.HexNumber);
                    i += 2;
                    r++;
                }            string s = System.Text.Encoding.Default.GetString(bytes);
                Console.WriteLine(s);
      

  2.   

    string a = "0152656420616E540000000000000000000041006400000000000000095B5265445D4E614461000000000000000148016400000000000000"; int[] ints = new int[a.Length / 4]; int i = 0,r = 0;            
    while (i < a.Length)
    {
    ints[r] = int.Parse(a.Substring(i, 4), System.Globalization.NumberStyles.HexNumber);
    i += 4;
    r++;
    }
    string s = "";
    char sd;
    foreach(int df in ints)
    {
                    sd = Convert.ToChar(df);
    if((int)sd == 0) continue;
    s = s + sd.ToString();
    }
    MessageBox.Show(s);
      

  3.   

    上面的方法有点问题,
    weisunding(鼎鼎) 写的方法是正确的,不过有个漏洞如果bytes[r]='\0'的时候后面的字符会被截取掉,所以,建议在while 循环中加入if(bytes[r] == '\0') bytes[r] = (byte)' ';将'\0'换成空格或者其他字符
      

  4.   

    s的值不会少,只是在Console.WriteLine的时候'\0'后面的不会输出