首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BitArray(16)到HexString

BitArray(16)到HexString
EN

Stack Overflow用户
提问于 2016-06-27 14:41:12
回答 3查看 1.1K关注 0票数 3

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

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

试过以下几点:

代码语言:javascript
复制
BitArray b = new BitArray(16);
b.Set(7, true);
b.Set(9, true);

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

但我找不到办法把它转化成黑帮。

我避免使用Byte,它是一个不同的类。

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

代码语言:javascript
复制
byte[] bytes = new byte[2];
b.CopyTo(bytes, 0);
string Retorno = BitConverter.ToString(bytes);
string[] auxstr = Retorno.Split('-');
Retorno = auxstr[1] + "-" + auxstr[0];

有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-27 14:54:09

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

那么,您只想创建十六进制值的字符串表示吗?这样做很容易:

代码语言:javascript
复制
int dec = 640;
string s = Convert.ToString(dec, 16);

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

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

代码语言:javascript
复制
string s = $"{dec:X4}";

请注意,640作为十六进制是280,而不是您在问题中所说的208

获取BitArray的“值”的一种简单方法是(对于长度为<= 32):

代码语言:javascript
复制
int v = array.OfType<bool>().Select((b, i) => b ? 1 << i : 0).Sum()
票数 1
EN

Stack Overflow用户

发布于 2016-06-27 14:49:45

尝尝这个,

代码语言:javascript
复制
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();          
票数 0
EN

Stack Overflow用户

发布于 2016-06-27 14:59:23

您的bitArray集和字符串表示形式并不相同。

您编写的0000001010000000实际上是这样设置的:

代码语言:javascript
复制
BitArray b = new BitArray(16);
b.Set(6, true);
b.Set(8, true);

但是你的代码:

代码语言:javascript
复制
BitArray b = new BitArray(16);
b.Set(7, true);
b.Set(9, true);

实际上产生了这组数字:

0000000101000000

如果您想要复制十六进制0280,那么您应该这样做:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38056854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档