0

我有十六进制数据

Byte[] data = new Byte[2];
data[0]=FF;
data[1]=FF;

这里数据的二进制表示为

1111 1111 1111 1111

在这里,我只想找到从位 0 到 11 的整数值。(从左到右)但我没有得到如何以最小的复杂性找到价值?请帮助我。在此先感谢。

4

4 回答 4

2

如果您只需要特定位,则可以应用带有位掩码的逻辑与。
在您的情况下,位掩码是 0000 1111 1111 1111(位 0 到并包括 11 位)或 0FFF。

您提到“从左到右”,所以也许您想要 1111 1111 1111 0000 (FFF0) - 位 4 到并包括 15。

于 2012-09-11T11:21:54.077 回答
1
short value = 0xFFFF;
value = value & 0x0FFF; 

此操作将四个高位变为 0。您可以将 charval[1] = val[1] & 0x0F

于 2012-09-11T11:21:50.833 回答
0

将字节数组转换为字符串:

StringBuilder sb = new StringBuilder(ba.Length * 2);
foreach (byte b in ba)
{
       sb.AppendFormat("{0:x2}", b)
}
return sb.ToString();

然后,将字符串解析为 int

 int a = int.Parse("10026AB0", NumberStyles.AllowHexSpecifier);
于 2012-09-11T11:22:31.537 回答
0

这是基本的东西...

您没有“十六进制”数据,而是 2 字节大小的整数。

在伪代码中(我不会说流利的 C#):

int value=data[1]<<8 | data[0];
int maskedvalue=value & 4095; // bits 0..11 inclusive set

现在 maskedvalue 保存仅设置了低 11 位的值。

于 2012-09-11T11:28:56.940 回答