我想将Hex转换为Ascii

时间:2017-05-14 08:59:14

标签: c# hex ascii data-conversion

我想将hex转换为ascii。

The file contents are as follows

我尝试了两种不同的方法。但我无法成功。

方法一:

 public void ConvertHex(String hexString)
    {
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < hexString.Length; i += 2)
        {
            String hs = hexString.Substring(i, i + 2);
            System.Convert.ToChar(System.Convert.ToUInt32(hexString.Substring(0, 2), 16)).ToString();
        }
        String ascii = sb.ToString();
        StreamWriter wrt = new StreamWriter("D:\\denemeASCII.txt");
        wrt.Write(ascii);

    }

方法2:

 public string HEX2ASCII(string hex)
    {
        string res = String.Empty;
        for (int a = 0; a < hex.Length; a = a + 2)
        {
            string Char2Convert = hex.Substring(a, 2);
            int n = Convert.ToInt32(Char2Convert, 16);
            char c = (char)n;
            res += c.ToString();
        }
        return res;
    }

传入错误消息:(

error message

我该怎么办?

2 个答案:

答案 0 :(得分:2)

您的“Method1”有一些机会被重写为工作。 (你的“方法2”毫无希望。)

因此,在“Method1”中,您执行String hs = hexString.Substring( i, i + 2 ),然后您忘记hs曾经存在过。 (编译器不应该给你一个警告吗?)然后你继续System.Convert.ToChar( System.Convert.ToUInt32( hexString.Substring( 0, 2 ), 16 ) )hexString.Substring( 0, 2 )将始终选择hexString的前两个字符,而不是两个字符由i指出。你可能想要做的是:System.Convert.ToChar( System.Convert.ToUInt32( hs , 16) )

此外,您宣布StringBuilder sb;,但您永远不会添加任何内容。与此同时,System.Convert.ToChar()不起副作用;它返回一个值;如果您不对返回的值执行任何操作,则返回的值将永远丢失。您可能要做的是将System.Convert.ToChar()的结果添加到StringBuilder

答案 1 :(得分:0)

您的输入中没有有效字符。 c#中的字符是两个字节类,带有private属性,指示字符是一个还是两个字节。编码库方法(unicode,UTF6,UTF7,UTF8)通常进行转换并设置私有属性。如果要转换为一个或两个字节,并且输入是大端或小端,则很难用输入判断。下面的代码转换为byte []和int16 []。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = "0178 0000 0082 f000 0063 6500 00da 6400 00be 0000 00ff ffff ffff ffff ffd6 6600";
            ConvertHex(input);
        }
        static void ConvertHex(String hexString)
        {
            Int16[] hexArray = hexString.Split(new char[] {' '},StringSplitOptions.RemoveEmptyEntries)
                    .Select(x => Int16.Parse(x, NumberStyles.HexNumber)).ToArray();

            byte[] byteArray = hexArray.Select(x => new byte[] { (byte)((x >> 8) & 0xff), (byte)(x & 0xff) }).SelectMany(x => x).ToArray();

        }
    }
}