user3222857
user3222857

Reputation: 25

C# coding: hexadecimal to decimal & character encoding

Below is the code(conversion of hexadecimal to decimal) I'm trying to work out .. I found error which appears in place I've commented in the code..

Please provide a solution to rectify ..

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]);
        }

What I'm getting as output is: "\0\0P\f\n[���������������" The converted decimal value is not been encoded.

UPDATE: Expected output is "0 28 0 20 80 12 10 91 6 164 255 255 255 255 255 255 255 255 255 255 255 255 255 255"

Upvotes: 0

Views: 1247

Answers (2)

Max Yakimets
Max Yakimets

Reputation: 1225

Instead of

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

write

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

Upvotes: 1

icbytes
icbytes

Reputation: 1851

You can use this and try to play with the radix ( in this case 2 ). This snippet, which I once wrote, helped me all the time.

 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);
        }
    }

Upvotes: 0

Related Questions