【问题标题】:C# - BitArray to HexC# - 位数组到十六进制
【发布时间】:2016-09-06 20:38:36
【问题描述】:

我有不同大小的BitArray,我想在十六进制字符串中进行转换。
我试图将BitArray 转换为byte[],但它没有给我正确的格式。 (Converting a boolean array into a hexadecimal number)

例如,BitArray 为 12,我希望字符串为 A8C(3 hexa,因为 12 位)
谢谢

【问题讨论】:

  • 如果BitArray 的大小为13 怎么办?
  • 你不是把结果字符串修剪成Math.Ceil(BitArray.Length / 4.0)的长度吗?
  • @DmitryBychenko BitArray 是 4 的倍数

标签: c# .net


【解决方案1】:

我已经为 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");
    }

【讨论】:

    【解决方案2】:

    你可以直接试试

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

    【讨论】:

      【解决方案3】:

      Converting a boolean array into a hexadecimal number 提供的解决方案是正确的。

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

      【讨论】:

      • 此解决方案适用于 8 的倍数的 BitArray。但对于 12 它不起作用
      猜你喜欢
      • 2015-11-10
      • 2011-12-09
      • 2011-06-01
      • 1970-01-01
      • 2018-05-17
      • 2012-03-17
      • 2015-03-30
      • 2013-06-02
      • 2021-09-08
      相关资源
      最近更新 更多