c# 多个16进制的字符串转二进制

@00FA00400000000101110B00FF00001000000000000000000000000000000000025000000000000000000000000000002400000000000230000000000000000004300000000000000000000000000000000000000000000000000000000000000000000000000000011000000000s00000000000000000000000000000000000000000000000000C0000000000000000000000000000000000300000000000000A000000000000000000000000000000000000001000000000000000034000000000000000110000000000000000000200000000000000000000000B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000003000000000000000000000000000000000000000000000000010000000000000000000000000000D0000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AAA0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031*\CR

如上面代码:
首先取的字符是:去掉前面的“@00FA00400000000101110B”字符和末尾的“31*\CR”6个字符,中间的那些字符都是由16禁止组成的。

例如“00FF 0000 0000 1000"这种格式,要把这些“无数”的16进制数全部转成2进制,1个16进制转为2禁止是16个字符,00FF=“0000000011111111”,也就是如果最前面不为1,要用0补满16位。最后把这些所有的2进制数存入数组。

见以下代码。注意其中的 HexString2BinString方法。

代码中没有使用问题中的十六进制串,而且原串中中还带有一个字符 s

using System;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = "12AEF";
            foreach (var c in s)
            {
                Console.Write("{0,-4} ", c);
            }
            Console.WriteLine();
            
            string r = HexString2BinString(s);
            Console.WriteLine(r);
        }

        static string HexString2BinString(string hexString)
        {
            string result = string.Empty;
            foreach (char c in hexString)
            {
                int v = Convert.ToInt32(c.ToString(), 16);
                int v2 = int.Parse(Convert.ToString(v, 2));
                // 去掉格式串中的空格,即可去掉每个4位二进制数之间的空格,
                result += string.Format("{0:d4} ", v2);
            }
            return result;
        }
    }
}

追问

额真细心,我例子错打了个s都看出来了。不过是4个字符4个字符的这样转2进制啊,你上面的是1个字符转2进制啊

追答

在提问中有:“00FF=0000000011111111 ……”
意思不就是将十六进制串中的 0-->二进制的 0000 , 0-->二进制的 0000, F-->二进制的 1111,F-->二进制的 1111,最后得到 0000000011111111 吗?

追问

哦哦 不好意思 我糊涂了,不过是要每4位把他存到数组里啊,例如你上面的例子,0001001010101110,这些存到数组[0],然后依次下面的数组[1],数组[2]...

追答

您的意图是:十六进制字串s=“12AEF”转换成一个二进制字串数组string[] r,1-->0001,作为r[0];2-->0010,作为r[1];A-->1010,作为r[2]……
对吗?

追问

不是我的意思是12AE的二进制作为r[0],F000的二进制作为r[1],这种意思。也就是1个16进制转为2进制后的数存到数组里。而上面有那么多个16进制,就是r[n].

追答using System.Collections.Generic;

static string[] HexString2BinString(string hexString)
{
    List<string> list = new List<string>();
    string result = string.Empty;
    int count = 0;
    foreach (char c in hexString)
    {
        int v = Convert.ToInt32(c.ToString(), 16);
        int v2 = int.Parse(Convert.ToString(v, 2));
        result += string.Format("{0:d4}", v2);
        count++;
        if ((count % 4) == 0)
        {
            list.Add(result);
            result = string.Empty;
        }
    }
    return list.ToArray();
}

温馨提示:答案为网友推荐,仅供参考