简体   繁体   中英

C# decoding ( converter)

I have a long code like 02 10 18 14 cb f5 50 d3 14 00 0d 00 09 00 05 00 04 7b 28 00 00 00 00 28 cb.

I am going to decode 00 09

to its equal value which is 2.25 I wrote this program , but the problem appears when i have another code which contains 00 1E instead of 00 09 .

00 09 must be converted to 0000 0000 0000 1001 then the last two bit should multiple to 0.25 and the rest must be multiple to 1 to reach 2.25 How can I change my program for recognize hex value like 00 1E ?

        double q=0.0,w=0.0,x,y;
        char []chrxB1=new char [4];
        char[] chrxB2 = new char[4];
        char[] chrxB3 = new char[4];
        char[] chrxB4 = new char[4];
        char []sn=new char [74];
        string ss, xB1, xB2, xB3, xB4, yB1, yB2, yB3, yB4;

        ss = textBox1.Text;
        xB1 = ss[37].ToString();
        xB2 = ss[36].ToString();
        xB3 = ss[34].ToString();
        xB4 = ss[33].ToString();

        yB1 = ss[43].ToString();
        yB2 = ss[42].ToString();
        yB3 = ss[40].ToString();
        yB4 = ss[39].ToString();

        string b1 = Convert.ToString(int.Parse(xB1), 2);
        chrxB1= b1.ToArray();
        if (chrxB1.Length!=0)
            for (int i = 0; i < chrxB1.Length; i++)
            {
                if (i == 0)
                   q=(int.Parse(chrxB1[i].ToString()) * (1));
                else if (i == 1)
                    q = q + (int.Parse(chrxB1[i].ToString()) * (2));
                else if (i == 2)
                    w = int.Parse(chrxB1[i].ToString()) * (1);
                else
                    w = w + (int.Parse(chrxB1[i].ToString()) * (2));
            }
        q=q*0.25;
        string b2 = Convert.ToString(int.Parse(xB2), 2);
        chrxB2 = b2.ToArray();
        if (chrxB2.Length != 0)
            for (int i = 0; i < chrxB2.Length; i++)
            {
                if (i == 0)
                    w = w + (int.Parse(chrxB2[i].ToString()) * (4));
                else if (i == 1)
                    w = w + (int.Parse(chrxB2[i].ToString()) * (8));
                else if (i == 2)
                    w = int.Parse(chrxB2[i].ToString()) * (16);
                else
                    w = w + (int.Parse(chrxB2[i].ToString()) * (32));
            }
        string b3 = Convert.ToString(int.Parse(xB3), 2);
        chrxB3 = b3.ToArray();
        if (chrxB3.Length != 0)
            for (int i = 0; i < chrxB3.Length; i++)
            {
                if (i == 0)
                    w = w + (int.Parse(chrxB3[i].ToString()) * (64));
                else if (i == 1)
                    w = w + (int.Parse(chrxB3[i].ToString()) * (128));
                else if (i == 2)
                    w = int.Parse(chrxB3[i].ToString()) * (256);
                else
                    w = w + (int.Parse(chrxB3[i].ToString()) * (512));
            }
        string b4 = Convert.ToString(int.Parse(xB4), 2);
        chrxB4 = b4.ToArray();
        if (chrxB4.Length != 0)
            for (int i = 0; i < chrxB4.Length; i++)
            {
                if (i == 0)
                    w=w+(int.Parse(chrxB4[i].ToString()) * (1024));
                else if (i == 1)
                    w = w + (int.Parse(chrxB4[i].ToString()) * (2048));
                else if (i == 2)
                    w = int.Parse(chrxB4[i].ToString()) * (4096);
                else
                    w = w + (int.Parse(chrxB4[i].ToString()) * (8192));
            }
        x = w + q;
        textBox2.Text = x.ToString();
    }
}

If you're asking

"Q: How do I parse a hex string in C#?"

, the answer is:

int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

I'm going to be honest with you - I'm not 100% sure what you are asking. However, I believe you are asking how to convert a string representing a integer in base-16.

var num = Int32.Parse("001e", NumberStyles.HexNumber); 

NumberStyles is in System.Globalization , so be sure to include that or fully qualify it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM