更改位数组中的值

标签 c arrays byte bit

我有一个“位图”可以说是 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/

相关文章:

c - 与线程相关的错误文件描述符

python - 如何从字节对象中删除双反斜杠 (`\\` )?

c++ - 如何在 C++ 中将 unsigned char* 转换为 std::string?

c - 如何使 linux 共享对象(库)独立运行?

c++ - mysql_stmt_store_result() 上的 MySQL C API 崩溃

java - 为 2 个数组赋值和对象 - Java

javascript - 通过方法对数组中的对象进行排序

c# - 如何获取通用列表中类型的字节大小?

c - 当我将数组传递给函数时值发生变化

Javascript数组id显示顺序