C#-位数组到十六进制

C#-位数组到十六进制,c#,.net,C#,.net,我有大小不同的位数组,我想得到十六进制字符串的转换。 我曾尝试将位数组转换为字节[],但没有给出正确的格式。() 例如,一个12的位数组,我希望字符串是A8C(3个十六进制,因为是12位) 谢谢提供的解决方案正确无误 BitArray arr = new BitArray(new int[] { 12 }); byte[] data1 = new byte[100]; arr.CopyTo(data1, 0); string hex

我有大小不同的
位数组
,我想得到十六进制字符串的转换。
我曾尝试将
位数组
转换为
字节[]
,但没有给出正确的格式。()

例如,一个12的
位数组
,我希望字符串是A8C(3个十六进制,因为是12位)
谢谢

提供的解决方案正确无误

        BitArray arr = new BitArray(new int[] { 12 });
        byte[] data1 = new byte[100];
        arr.CopyTo(data1, 0);
        string hex = BitConverter.ToString(data1);
你可以直接试试

  StringBuilder sb = new StringBuilder(bits.Length / 4);

  for (int i = 0; i < bits.Length; i += 4) {
    int v = (bits[i] ? 8 : 0) | 
            (bits[i + 1] ? 4 : 0) | 
            (bits[i + 2] ? 2 : 0) | 
            (bits[i + 3] ? 1 : 0);

    sb.Append(v.ToString("x1")); // Or "X1"
  }

  String result = sb.ToString();
StringBuilder sb=新的StringBuilder(bit.Length/4);
对于(int i=0;i
我为BitArray实现了三种有用的扩展方法,它们可以实现您想要的功能:

    public static byte[] ConvertToByteArray(this BitArray bitArray)
    {
        byte[] bytes = new byte[(int)Math.Ceiling(bitArray.Count / 8.0)];
        bitArray.CopyTo(bytes, 0);
        return bytes;
    }

    public static int ConvertToInt32(this BitArray bitArray)
    {
        var bytes = bitArray.ConvertToByteArray();

        int result = 0;

        foreach (var item in bytes)
        {
            result += item;
        }

        return result;
    }

    public static string ConvertToHexadecimal(this BitArray bitArray)
    {
        return bitArray.ConvertToInt32().ToString("X");
    }

如果
BitArray
的大小为
13
,那么您是否可以将结果字符串的长度修剪为
Math.Ceil(BitArray.length/4.0)
?@DmitryBychenko
BitArray
是4的倍数此解决方案适用于8的倍数的BitArray。但对于12岁的孩子来说,这是行不通的