unsigned char data[8];
unsigned str[2];
str[1] = 0;
str[0] = 24;
memset(data,str[0],4);
memset(data+4,str[1],4);unsigned len[2];
memcpy(len,data,8);printf("%d,%d\n",len[0],len[1]);
的结果却不是24,0.
这是什么?如果要得到24,0.应该如何?
PS:
unsigned char是一个字节;
unsigned是4个字节。

解决方案 »

  1.   

    memset(data,str[0],4);执行这个函数后,data数组的每个元素(一个字节)都被设置为24,即data[0]=24, data[1]=24, data[2]=24, data[3]=24,24的16进制是18,做为一个unsigned int 输出用16进制表示就是0x18181818,换算为10进制就是404,232,216。
      

  2.   


    原来是memset()作怪。
    那我直接绕过memset(),用memcpy(len,str,8);就OK了。
      

  3.   


    unsigned char data[8];
    unsigned str[2];
    str[1] = 0;
    str[0] = 24;
    memset(data,0,4);
    memset(data,str[0],1);
    memset(data+4,str[1],4); unsigned len[2];
    memcpy(len,data,8); printf("%d,%d\n",len[0],len[1]);
    unsigned 是unsigned int 是4位。
    你原来memset(data,str[0],4);  4位就变成  24,24,24,24
    只能拷贝第一位。地位在前,高位在后
      

  4.   

    不好意思,刚都结贴了。
    既然memset();只能拷贝第一位,那我就改成用memcpy();实现了。
    问题已经解决了。
    谢谢~