C#编码:十六进制到十进制&字符编码

时间:2014-01-22 09:43:17

标签: c# string hex

下面是代码(十六进制到十进制的转换)我正在尝试解决.. 我发现错误出现在我已在代码中评论过的地方..

请提供纠正解决方案..

static void Main(string[] args)
    {

        byte[] byteData;
        int n;
        byteData = GetBytesFromHexString("001C0014500C0A5B06A4FFFFFFFFFFFFFFFFFFFFFFFFFFFF");
        n = byteData.Length;
        Console.WriteLine(n);
        string s = System.Text.Encoding.UTF8.GetString(byteData, 0, n);   //error
        Console.WriteLine(s);
        Console.ReadLine();
    }

    public static byte[] GetBytesFromHexString(string hexString)
    {
        //MessageBox.Show("getbytes ");
        if (hexString == null)
            return null;

        if (hexString.Length % 2 == 1)
            hexString = '0' + hexString; // Up to you whether to pad the first or last byte

        byte[] data = new byte[hexString.Length / 2];

        for (int i = 0; i < data.Length; i++)
        {
            data[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            Console.WriteLine(data[i]);
        }

我得到的输出是: “\ 0 \ 0P \˚F\ n [” 转换的十进制值未编码。

更新 预期输出为“0 28 0 20 80 12 10 91 6 164 255 255 255 255 255 255 255 255 255 255 255 255 255 255”

2 个答案:

答案 0 :(得分:1)

而不是

string s = System.Text.Encoding.UTF8.GetString(byteData, 0, n);

string s = String.Join(" ", byteData);

答案 1 :(得分:0)

你可以使用它并尝试使用基数(在这种情况下为2)。我曾经写过的这个片段一直帮助着我。

 private void ConvHexStringToBitString(ref string strErrorBitMask)
    {
        try
        {
            string strTempStr = strErrorBitMask;
            if (strTempStr != string.Empty)
            {
                strTempStr = Convert.ToString(Convert.ToInt32(strTempStr.Replace(" ", "0"), 16), 2);
            }
            strErrorBitMask = strTempStr.PadLeft(32, '0');

        }
        catch (Exception ex)
        {
            LogWithMsg(ex);
        }
    }