use*_*110 4 c c++ bit-manipulation memcpy
谁能解释为什么这不起作用?我试图将一个unsigned int放入一个char缓冲区,然后将其提取回另一个unsigned int.
1 #include<stdio.h>
2 #include<string.h>
3 int main(){
4 unsigned int tester = 320;
5 char buffer[512];
6 memset(buffer,0,512);
7 memcpy(buffer,&tester,sizeof(unsigned int));
8 /*buffer[0]|=tester;
9 buffer[1]|=(tester>>8);
10 buffer[2]|=(tester>>16);
11 buffer[3]|=(tester>>24);*/
12 unsigned int tested;
13 memcpy(&tested,buffer,sizeof(unsigned int));
14
15 /*tested|=(buffer[3]<<24);
16 tested|=(buffer[2]<<16);
17 tested|=(buffer[1]<<8);
18 tested|=(buffer[0]);*/
19 printf("\n %d\n",tested);
20 }
Run Code Online (Sandbox Code Playgroud)
当我做memcpy它工作.但是当我采用按位方法时,它不起作用.有趣的是,当我把缓冲区大小设置为20时,它的工作原理.但是当我使用大缓冲区,甚至50,它总是在按位方面打印368.memcpy再次正常工作.
Ric*_*ton 10
当您在第12行声明测试时,unsigned int tested;它应该初始化为零.unsigned int tested =0;此外,使用-Wuninitialized或-Wall进行编译会警告您测试未初始化.