我试图将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];
有任何建议吗?
答案 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