Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C位操作字符数组_C_Bit Manipulation - Fatal编程技术网

C位操作字符数组

C位操作字符数组,c,bit-manipulation,C,Bit Manipulation,我有一个指向无符号字符数组的指针,例如无符号字符*uc_数组。如果我将地址指向的内容向右移动8位,它们将位于uc_数组+1?移动内容将修改其值,而不是在内存中移动它。否。。。。如果取消引用指针*uc_array++,则会增加指针指向的值。但是,如果执行此操作,uc_数组+++则会增加指针的地址,该指针指向*uc_数组返回的“下一个相邻值” 不要忘记,指针算法取决于指针的类型的大小,对于字符指针,它是1,对于int,它是4,这取决于所使用的平台和编译器…您的问题只有在解释为 memmove(uc_

我有一个指向无符号字符数组的指针,例如
无符号字符*uc_数组
。如果我将地址指向的内容向右移动8位,它们将位于
uc_数组+1

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

否。。。。如果取消引用指针
*uc_array++
,则会增加指针指向的值。但是,如果执行此操作,
uc_数组+++
则会增加指针的地址,该指针指向
*uc_数组
返回的“下一个相邻值”


不要忘记,指针算法取决于指针的类型的大小,对于字符指针,它是1,对于int,它是4,这取决于所使用的平台和编译器…

您的问题只有在解释为

memmove(uc_array + 1, uc_array, bytesize_of_array);
我假设您在8位字节平台上,移位意味着在解释为连续字节的长位序列时移位位(数组后需要有一个字符来解释移位)。实际上,存储在地址
uc\u数组
的值将存储在
uc\u数组+1

但是如果你做这样的循环

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

假设8位字节,你会把所有的都置零,一个字节一个字节地移动掉所有的位

否。对值的修改仅影响该值,而不影响相邻值。这包括轮班操作员


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

这取决于数据的移位方式。如果您这样做(quint16)(*uc_数组)>>8,那么第一个字节将移动到第二个字节。但是如果只做(*uc_数组)>>8,那么,正如其他人所说,您将清空您的数据。

他们仍将在
uc_数组+
中(post inc.)。注意:我将OP的
uc_数组+
更改为
uc_数组+1