BitArray(16)到HexString

时间:2016-06-27 14:41:12

标签: c#

我试图将BitArray转换为Hex String

我的测试BitArray是“0000001010000000”,它应该以十六进制返回“02 80”

尝试以下方法:

        BitArray b = new BitArray(16);
        b.Set(7, true);
        b.Set(9, true);

然后,通过检查我创建的BitArray对象,并获得与该二进制字符串对应的640十进制值。

但我找不到将其转换为Hex的方法。

我避免使用字节数组,这是一个不同的类。

这有效,但它有点复杂我肯定必须有一个更简单的方法,我不明白为什么我必须切换值

        byte[] bytes = new byte[2];
        b.CopyTo(bytes, 0);
        string Retorno = BitConverter.ToString(bytes);
        string[] auxstr = Retorno.Split('-');
        Retorno = auxstr[1] + "-" + auxstr[0];

有任何建议吗?

3 个答案:

答案 0 :(得分:1)

  

然后,通过检查我创建的BitArray对象,并获得与该二进制字符串对应的640十进制值。

所以你只想创建一个十六进制值的字符串表示?这可以很容易地完成:

int dec = 640;
string s = Convert.ToString(dec, 16);

甚至string s = $"{dec:X}";

对于前导零(正如您在问题中所示),最好的是

string s = $"{dec:X4}";

请注意,正如您在问题中所述,640为十六进制为280而不是208

获得"价值的简单方法"你的BitArray是(长度< = 32):

int v = array.OfType<bool>().Select((b, i) => b ? 1 << i : 0).Sum()

答案 1 :(得分:0)

试试这个,

string binary = "0000001010000000";

StringBuilder hexvalue= new StringBuilder(binary.Length / 8 + 1);           

int Len = binary.Length % 8;
if (Len != 0)
{               
     binary = binary.PadLeft(((binary.Length / 8) + 1) * 8, '0');
}

for (int i = 0; i < binary.Length; i += 8)
{
     string Bits = binary.Substring(i, 8);
     hexvalue.AppendFormat("{0:X2}", Convert.ToByte(Bits , 2));
}

binary =  hexvalue.ToString();          

答案 2 :(得分:0)

您的bitArray集和字符串表示形式不一样。

您写的0000001010000000实际设置如下:

BitArray b = new BitArray(16);
b.Set(6, true);
b.Set(8, true);

但你的代码:

BitArray b = new BitArray(16);
b.Set(7, true);
b.Set(9, true);

实际上产生了这组数字:

0000000101000000

如果你想重现Hex 0280而不是你应该这样做:

BitArray b = new BitArray(16);
b.Set(6, true);
b.Set(8, true);

var @string = String.Concat(b.Cast<bool>().Select(x=> { return x ? '1' : '0'; }));
var result = Convert.ToInt32(@string, 2).ToString("X4");

其中result将具有此值0280