linux之字节序

大端字节序(Big-Endian)和小端字节序(Little-Endian) 是两种不同的多字节数据存储方式,主要区别在于字节在内存中的排列顺序。它们在计算机体系结构、网络通信和文件存储中非常重要。


1. 基本概念

  • 字节序(Endianness):指多字节数据(如 int, float 等)在内存中的存储顺序。
  • 核心问题:一个 32 位整数 0x12345678(十六进制),在内存中如何排列?

2. 大端字节序(Big-Endian)

  • 高字节在前,低字节在后(类似人类书写习惯)。

  • 示例0x12345678 的存储顺序:

    内存地址 存储内容
    0x1000 0x12
    0x1001 0x34
    0x1002 0x56
    0x1003 0x78
  • 特点

    • 高位字节(0x12)存储在低地址。
    • 常见场景:网络协议(如 TCP/IP)、Java 虚拟机、PowerPC 处理器。

3. 小端字节序(Little-Endian)

  • 低字节在前,高字节在后(与人类书写习惯相反)。

  • 示例0x12345678 的存储顺序:

    内存地址 存储内容
    0x1000 0x78
    0x1001 0x56
    0x1002 0x34
    0x1003 0x12
  • 特点

    • 低位字节(0x78)存储在低地址。
    • 常见场景:x86/x64 处理器、ARM(可配置)、Windows/Linux 系统。

4. 如何判断当前系统的字节序?

C 代码示例

#include <stdio.h>

int main() {
int num = 0x12345678;
char *p = (char *)&num;
if (*p == 0x78) {
printf("Little-Endian\n");
} else {
printf("Big-Endian\n");
}
return 0;
}
  • 如果输出 Little-Endian,说明系统是小端;否则是大端。

5. 字节序的实际影响

  1. 网络通信

    • 网络协议(如 IP、TCP)默认使用 大端字节序(称为“网络字节序”)。
    • 发送数据前需调用 htonl()(Host to Network Long)转换字节序。
  2. 文件读写

    • 跨平台读取二进制文件时(如 BMP 图片),需注意字节序。
  3. 跨平台开发

    • 不同处理器(如 x86 vs PowerPC)可能使用不同字节序,需处理兼容性。

6. 记忆技巧

  • 大端:高字节在低地址(“高个子站前面”)。
  • 小端:低字节在低地址(“小个子站前面”)。

7. 总结

特性 大端字节序 小端字节序
字节顺序 高位在前(0x12... 低位在前(0x78...
常见架构 PowerPC, SPARC x86, ARM(通常)
网络协议 是(TCP/IP) 需转换
人类友好 是(类似书写顺序)

理解字节序对底层编程、网络协议和跨平台开发至关重要!

linux之字节序的更多相关文章

  1. [Linux]关于字节序的解析

    剥鸡蛋的故事 <格列佛游记>中记载了两个征战的强国,你不会想到的是,他们打仗竟然和剥鸡蛋的姿势有关. 很多人认为,剥鸡蛋时应该打破鸡蛋较大的一端,这群人被称作“大端(Big endian) ...

  2. 判别linux机器字节序为大端还是小端

    代码如下: #include <iostream> #include <arpa/inet.h> #include <cstdio> using namespace ...

  3. Linux 网络编程详解一(IP套接字结构体、网络字节序,地址转换函数)

    IPv4套接字地址结构 struct sockaddr_in { uint8_t sinlen;(4个字节) sa_family_t sin_family;(4个字节) in_port_t sin_p ...

  4. linux程序设计——主机字节序和网络字节序(第十五章)

    15.2.10    主机字节序和网络字节序 当在基于intel处理器的linux机器上执行新版本号的server和客户程序时,能够用netstat命令查看网络连接状况.它显示了客户/server连接 ...

  5. linux kernel如何处理大端小端字节序

    (转)http://blog.csdn.net/skyflying2012/article/details/43771179 最近在做将kernel由小端处理器(arm)向大端处理器(ppc)的移植的 ...

  6. Linux 字节序

    小心不要假设字节序. PC 存储多字节值是低字节为先(小端为先, 因此是小端), 一些高 级的平台以另一种方式(大端)工作. 任何可能的时候, 你的代码应当这样来编写, 它不在 乎它操作的数据的字节序 ...

  7. linux的大小端、网络字节序问题 .

    1.80X86使用小端法,网络字节序使用大端法. 2.二进制的网络编程中,传送数据,最好以unsigned char, unsigned short, unsigned int来处理, unsigne ...

  8. linux网路编程:字节序(大端、小端、网络、主机)

    字节序:就是数据在内存中的存放顺序,也可称之为端模式. 大端模式和小端模式的定义 1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端. 2) Big-End ...

  9. Linux网络编程--字节序

    1 .谈到字节序,那么会有朋友问什么是字节序 非常easy:[比如一个16位的整数.由2个字节组成,8位为一字节,有的系统会将高字节放在内存低的地址上,有的则将低字节放在内存高的地址上,所以存在字节序 ...

  10. 【Linux 网络编程】字节序和地址装换

    (3)字节序    <1>大端字节序        最高的有效位存储于最低内存地址处,最低有效位存储于最高内存地址处.    <2>小端字节序        最高的有效位存储于 ...

随机推荐

  1. RESTful API 设计原则深度解析

    在 Web 服务架构中,RESTful API作为一种轻量级.可扩展的接口设计风格,通过 HTTP 协议实现资源的标准化访问.本文从核心原则.URL 设计.HTTP 方法应用.状态管理及面试高频问题五 ...

  2. laradock下mysql You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYS...

    上图 异常报错 mysql You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_R ...

  3. 2025 FJCPC 复建 VP

    按开题顺序写 \(BCDEFGHIJKLA(D?)\),\(M\) 送的不写 B 首先发现铜铁本质等价(铜铁的转换不影响 \(val\) ),所以考虑枚举最后金和银的数量 \(gold, silver ...

  4. Java--连接池和分页

    连接池 分析: 涉及频繁的连接的打开.关闭,影响程序的运行效率! 连接管理: 预先创建一组连接,有的时候每次取出一个: 用完后,放回: 学习连接池: a. 自定义一个连接池 b. 学习优秀的连接池组件 ...

  5. C语言存储区域

    有错误请指教 1.文字常量区域  存储在 代码段   不能被修改 2.全局变量  静态存储区  存储在  数据段 3.函数中的局部变量 存储在  栈中 4.malloc  new  中的变量存储在   ...

  6. API生命周期管理平台,构建统一API管理门户

    API生命周期管理平台是企业在实施API战略过程中首选的IT支撑系统,通过RestCloud API生命周期管理平台可以全面管控企业的API资产.在数字化与智慧化的大趋势之下,中国经济正在经历从消费互 ...

  7. Management-DecisionMaking-Leadership:{Rational,BoundedRational,Intuitive,EvidenceBasedManagerial,Crowdsourcing} D.M.

    Rational VS Intuitive VS EBM VS CS: 例如:当经济不景气时期,亲戚聚会时,面对一落难亲戚, 尽管风传外面有破产负债,但确实没害过亲朋好友做过,怎么决策: Intuit ...

  8. SciTech-Psychology-Management-Behavioral Approach: Hawthorne effect霍桑效应: 主试者不断调整可改变受试对象的心理与行为+受试者因感知被观察而改变行为

    长期行为上: 立场.思想信仰.文化理念.利益分配.投入产出比.自主自由度等,多维度决定. 短期行为上: 霍桑效应是一方面,被关注等社会性需要的满足, 对比物质待遇 也/更 能激励员工的积极性和创造性 ...

  9. js入门基础语法

    js入门基础语法 什么是javaScript 概述 javaScript是世界上最流行的一门脚本语言 javaScript是一门很随意的语言 有句话叫做如果可以重新来过我就只愿意学javaScript ...

  10. 使用uint64_t批量比较短字符串

    记录一下从开源代码里学来的短字符串比较优化. 这个优化只适用于长度在八字节以下的字符串,且只适用于优化相等比较. 原理 想要判断字符串相等,常见的有利用strcmp.利用字符串的hash或者利用正则表 ...