C 更改位数组中的值
我有一个“位图”,比如说,64宽。表示每字节8位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也解决不了。显然,有一种正确的方法可以做到这一点。正如你
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