C 更改位数组中的值

C 更改位数组中的值,c,arrays,byte,bit,C,Arrays,Byte,Bit,我有一个“位图”,比如说,64宽。表示每字节8位0000 0000假设我想激活第二位,0100 0000 我尝试创建一个无符号字符数组并使用memcpy memcpy(bitmap[2], 1, sizeof(1)); 我甚至尝试在一个无符号字符变量中声明1 unsigned char bit = 1; memcpy(bitmap[2], bit, sizeof(bit)); 我知道strcpy在这种情况下解决不了任何问题,memcpy也解决不了。显然,有一种正确的方法可以做到这一点。正如你

我有一个“位图”,比如说,64宽。表示每字节8位
0000 0000
假设我想激活第二位,
0100 0000

我尝试创建一个无符号字符数组并使用memcpy

memcpy(bitmap[2], 1, sizeof(1));
我甚至尝试在一个无符号字符变量中声明1

unsigned char bit = 1;
memcpy(bitmap[2], bit, sizeof(bit));
我知道strcpy在这种情况下解决不了任何问题,memcpy也解决不了。显然,有一种正确的方法可以做到这一点。正如你所看到的,我不是C专家


也许我不应该像这样尝试更改数组中的值?

让我们假设位图是这样的

unsigned char bitmap[8] = {0};
您想激活
位图
数组(
位图[0]
)中第一个字节的第二位(从左开始):


假设您的位图是这样的

unsigned char bitmap[8] = {0};
您想激活
位图
数组(
位图[0]
)中第一个字节的第二位(从左开始):


“位图”可以说是64位宽
-64位宽?那么8字节?那是单个
长的
还是一个8个字符的数组?@Mike是的8个字节,我现在不会用它作为字节,只想知道我要更改的位置,并让它为我更改位图。位图将是未签名字符的数组,如果我不应该这样做,请纠正我。
“位图”比如说,64宽
-64位宽?那么8字节?那是单个
长的
还是一个8个字符的数组?@Mike是的8个字节,我现在不会用它作为字节,只想知道我要更改的位置,并让它为我更改位图。位图将是未签名字符的数组,如果我不应该这样做,请纠正我。你能给我解释一下这是如何工作的,我不想把它扔到代码上,我也想学习它。我假设它会从右到左插入“1”六个房子?是的,我有,对不起。我将它们移动到错误的位置,十六进制值不正确,因为我没有硬编码位置。代码是有效的,谢谢你的帮助。你能给我解释一下它是如何工作的吗?我不想把它扔到代码上,我也想学它。我假设它会从右到左插入“1”六个房子?是的,我有,对不起。我将它们移动到错误的位置,十六进制值不正确,因为我没有硬编码位置。代码有效,谢谢你的帮助。
bitmap[0] = 1<<6; // means 1 shifted to the left with 6 steps


                                  1<<0
0    0    0    0    0    0    0    1

                            1<<1
0    0    0    0    0    0    1    0

                       1<<2
0    0    0    0    0    1    0    0

                  1<<3
0    0    0    0    1    0    0    0

......

   1<<6
0    1    0    0    0    0    0    0