memcpy字节序问题

Posted zhanggaofeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

 

以上是关于memcpy字节序问题的主要内容,如果未能解决你的问题,请参考以下文章

memcpy与大小端

字节序的问题,为啥GBK和UTF-8没有字节序问题,而UTF-16就有?

C/C++ 网络编程字节序的问题

主机字节序和网络字节序

理解字节序 大端字节序和小端字节序

手把手写C++服务器(20):网络字节序与主机字节序大端小端与共用体