如何将unsigned int放入char数组并将其解压缩

时间:2012-04-28 20:59:02

标签: 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 }

当我做memcpy它工作。但是当我采用按位方法时,它不起作用。有趣的是,当我把缓冲区大小设置为20时,它的工作原理。但是当我使用大缓冲区,甚至50,它总是在按位方面打印368。 memcpy再次正常工作。

1 个答案:

答案 0 :(得分:10)

当您在第12行unsigned int tested;上声明测试时,它应该初始化为零unsigned int tested =0;此外,使用-Wuninitialized或-Wall进行编译会警告您测试未初始化。