c - 用于获取 X 和 Y 位之间的值的位掩码

标签 c

我有一个 char 指针,它指向数组的 16 个字节(因此是 128 位)。 这些位包含一些对我的任务有值(value)的信息,我需要从它们的固定位置解析这些值。例如,第23位和第12位之间有时间信息。我知道我需要位掩码来检索此类数据,但我无法管理它。

谁能告诉我如何获取这些信息?

最后,我需要将这些检索到的位转换为整数,但这已经是任务的简单部分。

最佳答案

一般方法是选择方括号内的字节,然后使用单个 & 屏蔽掉您关心的位,然后将字节右移来自 lsb 的位数,然后您就得到了整数值。

例如

int i = (int)((a[1] & 0x6) >> 1);

这将获取第二个字的第二个和第三个最低有效位的值,并将该值放入一个整数中。

更具体地针对您的问题: 第23位和第12位

int i = (int)((a[1] & 0xF0) >> 4) || (((int)(a[2])) << 8);

C/C++ 中的另一种方法是定义带有位域的打包结构。

关于c - 用于获取 X 和 Y 位之间的值的位掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30026337/

相关文章:

c - 为什么将结构放在没有引用名称的结构中

具有十进制、八进制和十六进制数字的计算器

c - C 中的可变大小数组和数组指针

c++ - Eclipse|Netbeans中C/C++远程系统开发

c - 如何使用 C 语言处理 http 服务器接收到的 <form> 数据,例如 (key=value&key=value&key=value&...) 并将每个值分配给变量?

c - 我如何计算以下 TCP/IP 协议(protocol)的 CRC 校验和

c - 如果未检查函数返回值,如何强制编译错误?

c - ubuntu 上的段错误,在 debian 上运行

c - 当 fd 之前未关闭时解压文件失败

c - 读取文件,修改每一行,将其存储到缓冲区中,一次打印