memcpy字节序问题

/* memcpy用法详解 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//memcpy字节序问题
int test()
{
    unsigned char data[2] = { 0xc,0x7d };
    unsigned short s = 0;
    unsigned short sb = 0;

    memcpy(&s, data, sizeof(unsigned short));

    printf("--[%x]---\n", s);    //打印 0x7d0c
    printf("--[%p]---\n", &s);    //打印 0x7d0c

    /*
    解释:
        这是由于本机字节序决定的,本机是小端字节序,因此高位位于内存地址低位,所以打印s的值是0x7d0c,但是在内存中存储的仍然是0x0c7d,如果你实际想要的数据是0xc7d,必须通过位操作来完成
    */

    sb |= ((unsigned short)data[0] << 8);
    sb |= data[1];

    printf("---sb=[%x]--------\n", sb);

    return 0;
}

int main()
{
    test();
    printf("-----ok------\n");
    getchar();
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/zhanggaofeng/p/11108561.html