【问题标题】:Converting a boolean array into a hexadecimal number将布尔数组转换为十六进制数
【发布时间】:2011-07-28 20:38:07
【问题描述】:

有没有一种简单的方法可以将布尔值数组转换为 8 位十六进制等效值?例如,如果我有

 bool[] BoolArray = new bool[] { true,false,true,true,false,false,false,true };

如果真值 = 1 和假值 = 0,那么我想要一个方法或函数将上述数组转换为 0xB1 (10110001)。

是否存在这样的功能或方法来做到这一点?顺便说一句,我正在使用 C#。

【问题讨论】:

    标签: c# .net binary boolean


    【解决方案1】:

    是的,您可以使用BitArray 类。应该这样做:

    BitArray arr = new BitArray(BoolArray);
    byte[] data = new byte[1];
    arr.CopyTo(data, 0);
    

    如果“8 位十六进制”是指字符串表示,则可以使用 BitConverter 类:

    string hex = BitConverter.ToString(data);
    

    【讨论】:

    • 这有效,但我忘了回答它直到现在!感谢您的帮助!
    【解决方案2】:

    怎么样

    static int BoolArrayToInt(bool[] arr)
    {
        if (arr.Length > 31)
            throw new ApplicationException("too many elements to be converted to a single int");
        int val = 0;
        for (int i = 0; i < arr.Length; ++i)
            if (arr[i]) val |= 1 << i;
        return val;
    }
    
    static string ToHexStr(int i) { return i.ToString("X8"); }
    

    注意:一位编辑指出 arr[0]LSB,但他认为是 MSB。这是一个 API 考虑因素,如果您希望 LSB 位于 arr[length-1],只需在传递给该函数之前反转数组即可。

    【讨论】:

    • 最佳答案,允许非 8 位编码。
    【解决方案3】:

    Binary部分可以通过这个方法实现:

    bool[] boolArray = {true, false, true} 将给出 101

    int BoolArrayToInt(bool[] bArray)
    {
    
        char[] caseChar = new char[bArray.Length];
    
        for(int i = 0; i < bArray.Length; i++)
        {
            if (bArray[i] == true)
            {
                caseChar[i] = '1';
            }
            else
            {
                caseChar[i] = '0';
            }
        }
    
        string caseString = new string(caseChar);
        int caseNum = System.Convert.ToInt32(caseString);
        return caseNum;
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 2018-07-04
      • 2010-10-16
      • 2015-01-26
      • 1970-01-01
      相关资源
      最近更新 更多