linux之字节序
linux之字节序
大端字节序(Big-Endian)和小端字节序(Little-Endian) 是两种不同的多字节数据存储方式,主要区别在于字节在内存中的排列顺序。它们在计算机体系结构、网络通信和文件存储中非常重要。
1. 基本概念
- 字节序(Endianness):指多字节数据(如
int,float等)在内存中的存储顺序。 - 核心问题:一个 32 位整数
0x12345678(十六进制),在内存中如何排列?
2. 大端字节序(Big-Endian)
高字节在前,低字节在后(类似人类书写习惯)。
示例:
0x12345678的存储顺序:内存地址 存储内容 0x1000 0x120x1001 0x340x1002 0x560x1003 0x78特点:
- 高位字节(
0x12)存储在低地址。 - 常见场景:网络协议(如 TCP/IP)、Java 虚拟机、PowerPC 处理器。
- 高位字节(
3. 小端字节序(Little-Endian)
低字节在前,高字节在后(与人类书写习惯相反)。
示例:
0x12345678的存储顺序:内存地址 存储内容 0x1000 0x780x1001 0x560x1002 0x340x1003 0x12特点:
- 低位字节(
0x78)存储在低地址。 - 常见场景:x86/x64 处理器、ARM(可配置)、Windows/Linux 系统。
- 低位字节(
4. 如何判断当前系统的字节序?
C 代码示例:
#include <stdio.h>
int main() {
int num = 0x12345678;
char *p = (char *)#
if (*p == 0x78) {
printf("Little-Endian\n");
} else {
printf("Big-Endian\n");
}
return 0;
}
- 如果输出
Little-Endian,说明系统是小端;否则是大端。
5. 字节序的实际影响
网络通信:
- 网络协议(如 IP、TCP)默认使用 大端字节序(称为“网络字节序”)。
- 发送数据前需调用
htonl()(Host to Network Long)转换字节序。
文件读写:
- 跨平台读取二进制文件时(如 BMP 图片),需注意字节序。
跨平台开发:
- 不同处理器(如 x86 vs PowerPC)可能使用不同字节序,需处理兼容性。
6. 记忆技巧
- 大端:高字节在低地址(“高个子站前面”)。
- 小端:低字节在低地址(“小个子站前面”)。
7. 总结
| 特性 | 大端字节序 | 小端字节序 |
|---|---|---|
| 字节顺序 | 高位在前(0x12...) |
低位在前(0x78...) |
| 常见架构 | PowerPC, SPARC | x86, ARM(通常) |
| 网络协议 | 是(TCP/IP) | 需转换 |
| 人类友好 | 是(类似书写顺序) | 否 |
理解字节序对底层编程、网络协议和跨平台开发至关重要!
linux之字节序的更多相关文章
- [Linux]关于字节序的解析
剥鸡蛋的故事 <格列佛游记>中记载了两个征战的强国,你不会想到的是,他们打仗竟然和剥鸡蛋的姿势有关. 很多人认为,剥鸡蛋时应该打破鸡蛋较大的一端,这群人被称作“大端(Big endian) ...
- 判别linux机器字节序为大端还是小端
代码如下: #include <iostream> #include <arpa/inet.h> #include <cstdio> using namespace ...
- Linux 网络编程详解一(IP套接字结构体、网络字节序,地址转换函数)
IPv4套接字地址结构 struct sockaddr_in { uint8_t sinlen;(4个字节) sa_family_t sin_family;(4个字节) in_port_t sin_p ...
- linux程序设计——主机字节序和网络字节序(第十五章)
15.2.10 主机字节序和网络字节序 当在基于intel处理器的linux机器上执行新版本号的server和客户程序时,能够用netstat命令查看网络连接状况.它显示了客户/server连接 ...
- linux kernel如何处理大端小端字节序
(转)http://blog.csdn.net/skyflying2012/article/details/43771179 最近在做将kernel由小端处理器(arm)向大端处理器(ppc)的移植的 ...
- Linux 字节序
小心不要假设字节序. PC 存储多字节值是低字节为先(小端为先, 因此是小端), 一些高 级的平台以另一种方式(大端)工作. 任何可能的时候, 你的代码应当这样来编写, 它不在 乎它操作的数据的字节序 ...
- linux的大小端、网络字节序问题 .
1.80X86使用小端法,网络字节序使用大端法. 2.二进制的网络编程中,传送数据,最好以unsigned char, unsigned short, unsigned int来处理, unsigne ...
- linux网路编程:字节序(大端、小端、网络、主机)
字节序:就是数据在内存中的存放顺序,也可称之为端模式. 大端模式和小端模式的定义 1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端. 2) Big-End ...
- Linux网络编程--字节序
1 .谈到字节序,那么会有朋友问什么是字节序 非常easy:[比如一个16位的整数.由2个字节组成,8位为一字节,有的系统会将高字节放在内存低的地址上,有的则将低字节放在内存高的地址上,所以存在字节序 ...
- 【Linux 网络编程】字节序和地址装换
(3)字节序 <1>大端字节序 最高的有效位存储于最低内存地址处,最低有效位存储于最高内存地址处. <2>小端字节序 最高的有效位存储于 ...
随机推荐
- RESTful API 设计原则深度解析
在 Web 服务架构中,RESTful API作为一种轻量级.可扩展的接口设计风格,通过 HTTP 协议实现资源的标准化访问.本文从核心原则.URL 设计.HTTP 方法应用.状态管理及面试高频问题五 ...
- 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 ...
- 2025 FJCPC 复建 VP
按开题顺序写 \(BCDEFGHIJKLA(D?)\),\(M\) 送的不写 B 首先发现铜铁本质等价(铜铁的转换不影响 \(val\) ),所以考虑枚举最后金和银的数量 \(gold, silver ...
- Java--连接池和分页
连接池 分析: 涉及频繁的连接的打开.关闭,影响程序的运行效率! 连接管理: 预先创建一组连接,有的时候每次取出一个: 用完后,放回: 学习连接池: a. 自定义一个连接池 b. 学习优秀的连接池组件 ...
- C语言存储区域
有错误请指教 1.文字常量区域 存储在 代码段 不能被修改 2.全局变量 静态存储区 存储在 数据段 3.函数中的局部变量 存储在 栈中 4.malloc new 中的变量存储在 ...
- API生命周期管理平台,构建统一API管理门户
API生命周期管理平台是企业在实施API战略过程中首选的IT支撑系统,通过RestCloud API生命周期管理平台可以全面管控企业的API资产.在数字化与智慧化的大趋势之下,中国经济正在经历从消费互 ...
- Management-DecisionMaking-Leadership:{Rational,BoundedRational,Intuitive,EvidenceBasedManagerial,Crowdsourcing} D.M.
Rational VS Intuitive VS EBM VS CS: 例如:当经济不景气时期,亲戚聚会时,面对一落难亲戚, 尽管风传外面有破产负债,但确实没害过亲朋好友做过,怎么决策: Intuit ...
- SciTech-Psychology-Management-Behavioral Approach: Hawthorne effect霍桑效应: 主试者不断调整可改变受试对象的心理与行为+受试者因感知被观察而改变行为
长期行为上: 立场.思想信仰.文化理念.利益分配.投入产出比.自主自由度等,多维度决定. 短期行为上: 霍桑效应是一方面,被关注等社会性需要的满足, 对比物质待遇 也/更 能激励员工的积极性和创造性 ...
- js入门基础语法
js入门基础语法 什么是javaScript 概述 javaScript是世界上最流行的一门脚本语言 javaScript是一门很随意的语言 有句话叫做如果可以重新来过我就只愿意学javaScript ...
- 使用uint64_t批量比较短字符串
记录一下从开源代码里学来的短字符串比较优化. 这个优化只适用于长度在八字节以下的字符串,且只适用于优化相等比较. 原理 想要判断字符串相等,常见的有利用strcmp.利用字符串的hash或者利用正则表 ...