字节序:大端法和小端法

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

  • 网络字节序为大端

程序判断大端法还是小端法
#include <stdio.h>

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 <<netinet/in.h>>

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位主机字节序的值
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容