C位操作char数组

时间:2010-11-21 17:02:12

标签: c bit-manipulation

我有一个指向unsigned char数组的指针,例如unsigned char *uc_array。如果我将地址指向右边的内容移位8位,它们将在uc_array + 1

5 个答案:

答案 0 :(得分:3)

移动内容将修改其值,而不是将其移动到内存中。

答案 1 :(得分:0)

否....如果取消引用指针*uc_array++,则表示正在递增指针所指向的值。但是,如果执行此操作,uc_array++您正在递增指针的地址,该地址指向*uc_array返回的“下一个相邻值”。

不要忘记指针算法依赖于指针的类型 size ,对于字符指针,它是1,对于int,它取决于4在平台和编译器上使用...

答案 2 :(得分:0)

您的问题只有在解释时才对我有意义,例如

memmove(uc_array + 1, uc_array, bytesize_of_array);

我假设你在8位字节平台上,并且通过移位你的意思是在解释为连续字节的长位序列时移位这些位(并且在阵列之后需要有一个字符来解释转移)。然后,地址uc_array中存储的值确实将存储在uc_array + 1

但是如果你做这样的循环

for(unsigned char *x = uc_array; x != uc_array + byte_count; ++x)
  *x >>= 8;

假设8位字节,你只需使那里的所有内容无效,字节将字节移走所有位。

答案 3 :(得分:0)

没有。对值的修改仅影响该值,而不影响相邻值。这包括班次经营者。

由移位运算符移出的位“丢失”。

答案 4 :(得分:0)

这取决于您如何转移数据。如果你做这样的事情(quint16)(* uc_array)>> 8然后第一个字节将移动到第二个字节。但如果只做(* uc_array)>> 8然后,正如其他人所说,你将清空你的数据。