首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用位值解析字节

如何使用位值解析字节
EN

Stack Overflow用户
提问于 2011-01-17 20:42:17
回答 2查看 2.3K关注 0票数 2

我必须从保存在位组合的三个部分中的字节中获取值。

位组合如下

--|---|

第一部分包含两位,第二部分包含3位,第三部分包含3位

样本值为

11010001 = 209十进制

我想要的是创建三个不同的属性,让我得到上面定义的给定位的三个部分的十进制值。

如何从这个十进制数中获取位值,然后从各个位中获取十进制值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-17 20:44:52

只需使用移位和掩码即可。假设两位值在字节的高位中:

代码语言:javascript
复制
int value1 = (value >> 6) & 3;  // 3 = binary 11
int value2 = (value >> 3) & 7;  // 7 = binary 111
int value3 = (value >> 0) & 7;

当然,最后一行不一定要使用移位操作符--移位0位什么也不做。我认为这增加了一致性。

对于您的样本值,将得到value1 = 3,value2 = 2,value3 = 1。

反转:

代码语言:javascript
复制
byte value = (byte) ((value1 << 6) | (value2 << 3) | (value3 << 0));
票数 5
EN

Stack Overflow用户

发布于 2011-01-17 20:44:49

您可以使用位掩码提取不同的部分,如下所示:

代码语言:javascript
复制
int part1=b & 0x3;
int part2=(b>>2) & 0x7;
int part3=(b>>5) & 0x7;

这会将每个部分转换为最低有效位,然后使用二进制与来屏蔽所有其他位。

我假设你不想要这些位的十进制值,而是一个包含它们值的int。整数在内部仍表示为二进制数。仅当您转换为字符串时,才会以10/decimal为基数表示int。

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

https://stackoverflow.com/questions/4713265

复制
相关文章

相似问题

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