C# 位数组(16)到十六进制字符串

C# 位数组(16)到十六进制字符串,c#,C#,我正在尝试将位数组转换为十六进制字符串 我的测试位数组是“0000001010000000”,它应该返回十六进制的“0280” 尝试了以下操作: BitArray b = new BitArray(16); b.Set(7, true); b.Set(9, true); 然后,通过检查我创建的BitArray对象,得到对应于该二进制字符串的640十进制值 但是我找不到把它转换成十六进制的方法 我避免使用不同类的字节数组 这是可行的,但有点复杂,我相信一定有更简单的方法,我不明白为什么我必须切换

我正在尝试将位数组转换为十六进制字符串

我的测试位数组是“0000001010000000”,它应该返回十六进制的“0280”

尝试了以下操作:

BitArray b = new BitArray(16);
b.Set(7, true);
b.Set(9, true);
然后,通过检查我创建的BitArray对象,得到对应于该二进制字符串的640十进制值

但是我找不到把它转换成十六进制的方法

我避免使用不同类的字节数组

这是可行的,但有点复杂,我相信一定有更简单的方法,我不明白为什么我必须切换值

byte[] bytes = new byte[2];
b.CopyTo(bytes, 0);
string Retorno = BitConverter.ToString(bytes);
string[] auxstr = Retorno.Split('-');
Retorno = auxstr[1] + "-" + auxstr[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();          
stringbinary=“000000 1010000000”;
StringBuilder hexvalue=新的StringBuilder(binary.Length/8+1);
int Len=二进制。长度为%8;
如果(Len!=0)
{               
binary=binary.PadLeft(((binary.Length/8)+1)*8,'0');
}
对于(int i=0;i
然后,通过检查我创建的BitArray对象,得到对应于该二进制字符串的640十进制值

所以您只想创建十六进制值的字符串表示形式?这样做很容易:

int dec = 640;
string s = Convert.ToString(dec, 16);
甚至
string s=$“{dec:X}”

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

string s = $"{dec:X4}";
请注意,
640
作为十六进制是
280
而不是
208
,正如您在问题中所述



获取
位数组
的“值”的一个简单方法是(对于长度b?1位数组集和字符串表示形式不相同

您编写了
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);
实际生成这组数字:

000000011000000

如果要复制十六进制
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");
BitArray b=新的位数组(16);
b、 设置(6,真);
b、 设置(8,正确);
var@string=string.Concat(b.Cast().Select(x=>{return x?'1':'0';}));
var result=Convert.ToInt32(@string,2).ToString(“X4”);

其中,
result
将具有此值
0280

请查看,这样您就可以将其转换为
字节[]
像in一样,单独格式化字节。调用
StringBuilder
的构造函数时,不需要指定容量。另外,关于这一操作的一些解释可能对OP非常方便。有点,但我确实需要从位数组中获取十进制数first@VyacheslavShcherbakov是吗我回答的最后一行做你想做的?或者你需要更大的阵列吗?非常感谢
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");