【发布时间】:2017-07-31 13:13:00
【问题描述】:
假设我有一个名为 backup 的 unsigned char 数组,我想在其中复制一些字节。但我想要做的是清除大部分位(从右到左 18 位)。我需要留下的是左边的两个位。这是我的尝试:
memcpy (buf, " AA", 3);
unsigned char backup[3];
memcpy( backup, buf, 3 ); // backup
int two_bits_backup;
two_bits_backup = (int) backup &= ~0b001111111111111111111111;
但它会产生错误: 左值需要作为赋值的左操作数
如何成功清除这两个位?
我要做的是清除这些位(粗体)
如果 two_bits_backup = 0b111111111111111111111111;
case two_bits_backup == 0b110000000000000000000000;
我想将 unsigned char 数组转换为 int 然后清除它。
我在 C 和 32 位平台上使用它,其中 int 有 4 个字节。
【问题讨论】:
-
如果
backup是一个无符号字符数组,则不能将其视为int。 (换句话说,(int)backup是非常错误的,它没有做任何你想要的事情。) -
你知道吗,a&=b 是 a = a & b 的简写形式?结果你不能modily(int)备份,因为它是r-value
-
代码中的
backup不是unsigned char *。 -
我不明白你在问什么。您能否提供示例输入/输出来演示您想要什么?
-
我想将无符号字符串数组转换为整数,然后清除22位
标签: c bit-manipulation