我正在尝试将BitArray转换为十六进制字符串
我的测试BitArray是"0000001010000000“,它应该返回十六进制的"02 80”。
试过以下几点:
BitArray b = new BitArray(16);
b.Set(7, true);
b.Set(9, true);然后,通过检查我创建的BitArray对象,得到对应于该二进制字符串的640个十进制值。
但我找不到办法把它转化成黑帮。
我避免使用Byte,它是一个不同的类。
这是可行的,但它有点复杂,我相信肯定有一个更简单的方法,我不明白为什么我必须转换值。
byte[] bytes = new byte[2];
b.CopyTo(bytes, 0);
string Retorno = BitConverter.ToString(bytes);
string[] auxstr = Retorno.Split('-');
Retorno = auxstr[1] + "-" + auxstr[0];有什么建议吗?
发布于 2016-06-27 14:54:09
然后,通过检查我创建的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()发布于 2016-06-27 14:49:45
尝尝这个,
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(); 发布于 2016-06-27 14:59:23
您的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
如果您想要复制十六进制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
https://stackoverflow.com/questions/38056854
复制相似问题