【问题标题】:Changing a value inside an array of bits更改位数组中的值
【发布时间】:2013-05-03 14:39:57
【问题描述】:

我有一个“位图”,可以说是 64 宽。意思是每字节 8 位。 0000 0000,假设我想激活第二个位,0100 0000

我尝试制作一个 unsigned char 数组并使用 memcpy。

memcpy(bitmap[2], 1, sizeof(1));

我什至尝试在 unsigned char 变量中声明 1。

unsigned char bit = 1;
memcpy(bitmap[2], bit, sizeof(bit));

我知道 strcpy 在这种情况下不会解决任何问题,而 memcpy 显然也没有解决它,肯定有一种正确的方法可以做到这一点。如您所见,我不是 C 专家..

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

【问题讨论】:

  • "bitmap" lets say, 64 wide - 64 宽?那么8个字节?那是单个 long 还是 8 个字符的数组?
  • @Mike 是的 8 个字节,我现在不会将它用作字节,只想能够告诉我要更改的位置并让它为我更改位图。位图将是无符号字符数组,如果我不应该这样做,请纠正我。

标签: c arrays byte bit


【解决方案1】:

假设你的位图是这样的

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

【讨论】:

  • 你能解释一下这是怎么工作的吗,我不想把它扔在代码上,我也想学习它。我假设它会从右到左插入“1”六个房子?
  • 是的,我有,抱歉。我将它们移动到错误的位置并且十六进制值不正确,因为我没有对位置进行硬编码。代码有效,感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2022-01-08
  • 2014-03-15
  • 1970-01-01
  • 2014-03-18
  • 2020-08-31
  • 1970-01-01
相关资源
最近更新 更多