我有一个“位图”可以说是 64 宽。意思是每字节 8 位。 0000 0000
假设我想激活第二位,0100 0000
。
我尝试制作一个无符号字符数组并使用 memcpy。
memcpy(bitmap[2], 1, sizeof(1));
我什至尝试在 unsigned char 变量中声明 1。
unsigned char bit = 1;
memcpy(bitmap[2], bit, sizeof(bit));
我知道在这种情况下 strcpy 不会解决任何问题,而 memcpy 显然也没有解决它,肯定有一种正确的方法可以做到这一点。如您所见,我不是 C 语言专家..
也许我不应该像这样尝试更改数组中的值?
最佳答案
让我们假设您的位图看起来像那样
unsigned char bitmap[8] = {0};
并且您想激活bitmap
数组 (bitmap[0]
) 中第一个字节的第二位(从左边开始):
bitmap[0] = 1U<<6;
bitmap[0]
二进制表示将是 0100 0000
编辑
bitmap[i]
是 8 位大小。
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
关于更改位数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16361541/