将整数转换为记录

use*_*906 5 ada

我从 C 得到一个 16 位整数。这个整数由 16 个标志组成。

如何在 16 个布尔值的记录中转换这个整数?

谢谢!

Aus*_*oke 3

您只需执行 16 次右移位并将结果与​​ 1 按位与即可确定是否设置了位/标志。这是一个例子(我希望这不是家庭作业):

#include <stdio.h>
#include <stdint.h>

typedef unsigned char BOOL;

int main(void)
{
   unsigned i;
   uint16_t flags = 0x6E8B; /* 0b0110111010001011 */
   BOOL arr[16];

   for (i = 0; i < 16; i++) {
      arr[i] = (flags >> i) & 1;
      printf("flag %u: %u\n", i+1, arr[i]);
   }

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

arr[0]将包含最低有效位和arr[15]最高有效位。

输出:

flag 1: 1
flag 2: 1
flag 3: 0
flag 4: 1
flag 5: 0
flag 6: 0
flag 7: 0
flag 8: 1
flag 9: 0
flag 10: 1
flag 11: 1
flag 12: 1
flag 13: 0
flag 14: 1
flag 15: 1
flag 16: 0
Run Code Online (Sandbox Code Playgroud)

  • @tim-oleksii:你到底会用 `memcpy` 做什么? (2认同)