我有十六进制数据
Byte[] data = new Byte[2];
data[0]=FF;
data[1]=FF;
这里数据的二进制表示为
1111 1111 1111 1111
在这里,我只想找到从位 0 到 11 的整数值。(从左到右)但我没有得到如何以最小的复杂性找到价值?请帮助我。在此先感谢。
我有十六进制数据
Byte[] data = new Byte[2];
data[0]=FF;
data[1]=FF;
这里数据的二进制表示为
1111 1111 1111 1111
在这里,我只想找到从位 0 到 11 的整数值。(从左到右)但我没有得到如何以最小的复杂性找到价值?请帮助我。在此先感谢。
如果您只需要特定位,则可以应用带有位掩码的逻辑与。
在您的情况下,位掩码是 0000 1111 1111 1111(位 0 到并包括 11 位)或 0FFF。
您提到“从左到右”,所以也许您想要 1111 1111 1111 0000 (FFF0) - 位 4 到并包括 15。
short value = 0xFFFF;
value = value & 0x0FFF;
此操作将四个高位变为 0。您可以将 charval[1] = val[1] & 0x0F
将字节数组转换为字符串:
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);
这是基本的东西...
您没有“十六进制”数据,而是 2 字节大小的整数。
在伪代码中(我不会说流利的 C#):
int value=data[1]<<8 | data[0];
int maskedvalue=value & 4095; // bits 0..11 inclusive set
现在 maskedvalue 保存仅设置了低 11 位的值。