CC++之大端小端

    xiaoxiao2021-03-25  82

    如果有一个变量

    unsigned int a=0x12345678;

     

    大端Big-Endian:高字节在前 12 34 56 78

    小端Little-Endian:低字节在前 78 56 34 12

    现在在vs上来看看&a

    由此可以看见我的pc是小端的(基本上可以断定)

    现在的PC、服务器、嵌入式产品基本以小端为主。(以前存在大端的芯片,摩托罗拉的对讲机)

     

    在协议中必须规定大小端,否则无法还原数据。

    为什么这么说呢?还有为什么要提大端和小端的概念!

    因为现在我们设备差不多都是小端的。但规定当发送网络信息的时候得采用大端

    这是规定的。所以必须这么做

    下面来展示下大端小端的转化

    #include <stdio.h> #include <string.h> int toByte(unsigned int a, unsigned char *buf) { buf[0] = a >> 24; buf[1] = a >> 16; buf[2] = a >> 8; buf[3] = a; return 4; } unsigned int fromBtytes(const unsigned char *buf) { unsigned int result = 0; result += buf[0] << 24; result += buf[1] << 16; result += buf[2] << 8; result += buf[3]; return result; } int main() { unsigned int a = 0x12345678; unsigned char buf[4]; toByte(a, buf); unsigned int b = fromBtytes(buf); return 0; }

    通过位运算就很容易把一个数据转化为大端或者小端。

    转载请注明原文地址: https://ju.6miu.com/read-25112.html

    最新回复(0)