字节序:大端法和小端法

大端和小端
大端和小端.png
  • 大端法:高位保存在低地址中
  • 小端法:高位存放在高地址中
大端和小端法对程序的影响
  • 字节序不是由操作系统决定,而是由cpu架构决定的
    比如 x86 的是小端序,而 PPC (PowerPC) 是big endian,所以跑在 x86 上的 linux/windows 都是小端,而跑在 PPC 上的linux则是大端。

  • 网络字节序为大端

程序判断大端法还是小端法
#include 

int main(int argc, char **argv)
{
    union {
        short s;
        char c[sizeof(short)];
    } un;

    un.s = 0x0102;
    if (sizeof(short) == 2) 
    {
        if (un.c[0] == 1 && un.c[1] == 2)
            printf("Big-Endian\n");
        else if (un.c[0] == 2 && un.c[1] == 1)
            printf("Little-Endian\n");
        else
            printf("not known\n");
    }
    else
    {
        printf("sizeof(short) = %d\n", sizeof(short));
    }
}
网络编程中常用的字节序转换函数有如下几个:
#include <>

uing16_t htons(uint16_t host16bitvalue);    // 参数为16位主机字节序的值,返回值是16位网络字节序的值

uint32_t htonl(uint32_t host32bitvalue);    // 参数为32位主机字节序的值,返回值是32位网络字节序的值

uint16_t ntohs(uint16_t net16bitvalue);     // 参数为16位网络字节序的值,返回值是16位主机字节序的值

uint32_t ntohl(uint32_t net32bitvalue);     // 参数为16位网络字节序的值,返回值是16位主机字节序的值

你可能感兴趣的:(字节序:大端法和小端法)