Linux 字节序
小心不要假设字节序. PC 存储多字节值是低字节为先(小端为先, 因此是小端), 一些高 级的平台以另一种方式(大端)工作. 任何可能的时候, 你的代码应当这样来编写, 它不在 乎它操作的数据的字节序. 但是, 有时候一个驱动需要使用单个字节建立一个整型数或者 相反, 或者它必须与一个要求一个特定顺序的设备通讯.
包含文件 <asm/byteorder.h> 定义了或者 BIG_ENDIAN 或者 LITTLE_ENDIAN, 依赖 处理器的字节序. 当处理字节序问题时, 你可能编码一堆 #ifdef LITTTLE_ENDIAN 条 件语句, 但是有一个更好的方法. Linux 内核定义了一套宏定义来处理之间的转换, 在处 理器字节序和你需要以特定字节序存储和加载的数据之间. 例如:
u32 cpu_to_le32 (u32); u32 le32_to_cpu (u32);
这 2 个宏定义转换一个值, 从无论 CPU 使用的什么到一个无符号的, 小端, 32 位数, 并且转换回. 它们不管你的 CPU 是小端还是大端, 不管它是不是 32-位 处理器. 在没有 事情要做的情况下它们原样返回它们的参数. 使用这些宏定义易于编写可移植的代码, 而 不必使用大量的条件编译建造.
有很多类似的函数; 你可以在 <linux/byteorder/big_endian.h> 和
<linux/byteorder/little_endian.h> 中见到完整列表. 一会儿之后, 这个模式不难遵循. be64_to_cpu 转换一个无符号的, 大端, 64-位 值到一个内部 CPU 表示. le16_to_cpus, 相反, 处理有符号的, 小端, 16 位数. 当处理指针时, 你也会使用如 cpu_to_le32p, 它 使用指向一个值的指针来转换, 而不是这个值自身. 剩下的看包含文件.
Linux 字节序的更多相关文章
- 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的大小端、网络字节序问题 .
1.80X86使用小端法,网络字节序使用大端法. 2.二进制的网络编程中,传送数据,最好以unsigned char, unsigned short, unsigned int来处理, unsigne ...
- linux网路编程:字节序(大端、小端、网络、主机)
字节序:就是数据在内存中的存放顺序,也可称之为端模式. 大端模式和小端模式的定义 1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端. 2) Big-End ...
- [Linux]关于字节序的解析
剥鸡蛋的故事 <格列佛游记>中记载了两个征战的强国,你不会想到的是,他们打仗竟然和剥鸡蛋的姿势有关. 很多人认为,剥鸡蛋时应该打破鸡蛋较大的一端,这群人被称作“大端(Big endian) ...
- Linux网络编程--字节序
1 .谈到字节序,那么会有朋友问什么是字节序 非常easy:[比如一个16位的整数.由2个字节组成,8位为一字节,有的系统会将高字节放在内存低的地址上,有的则将低字节放在内存高的地址上,所以存在字节序 ...
- 【Linux 网络编程】字节序和地址装换
(3)字节序 <1>大端字节序 最高的有效位存储于最低内存地址处,最低有效位存储于最高内存地址处. <2>小端字节序 最高的有效位存储于 ...
- 大端字节序&小端字节序(网络字节序&主机字节序)
大端字节序:整数的高位字节存储在内存的低地址处,低字节存储在内存的高地址处. 小端字节序:整数的高位字节存储在内存的高地址处,低字节存储在内存的低地址处. 一般pc大多采用小端字节序,也称为主机字节序 ...
随机推荐
- [转] javascript核心
原文:http://dmitrysoshnikov.com/ecmascript/javascript-the-core/ 对象 原型链 构造函数 执行上下文栈 执行上下文 变量对象 活动对象 作用域 ...
- PHPCMS快速建站系列之在线留言
有两种方法 第一种方法: 利用留言板插件,在后台模板中,安装留言板插件使用,这里先不展开. 第二种方法: 表单向导的适用场合: 如果一个前台页面只是为了提交表单数据,那么就非常适合适用表单向导的功能, ...
- Web富媒体应用
曾几何时,大家都在以flash开发的富媒体交互应用而感叹,一是叹它的丰富多彩的效果,一是叹它的局限.性能以及加载时长等问题. 如今,市场以及基本上没有flash什么事情了,而是H5的天下,可惜,移动应 ...
- ORA-03113: end-of-file on communication channel 解决方案
Oracle启动时报如下错误:ORA-03113: end-of-file on communication channel 解决方案如下:1.查看orcle启动日志,确定具体是什么原因引起的错误. ...
- Java练习 SDUT-2618_手机键盘
手机键盘 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 大家应该都见过那种九键的手机键盘,键盘上各字母的分布如下图所示 ...
- JQ取消hover事件
$('a').unbind('mouseenter').unbind('mouseleave');
- Ubuntu18.10创建软件图标
解压下载包都/opt目录 创建并编辑/usr/share/applications/xxx.desktop [Desktop Entry] Encoding=UTF-8 Name=Pycharm Co ...
- oracle函数 CONVERT(c1,set1,set2)
[功能]将源字符串c1 从一个语言字符集set2转换到另一个目的set1字符集 [参数]c1,字符串,set1,set2为字符型参数 [返回]字符串 [示例] select convert('stru ...
- HDU-1114_Piggy-Bank
Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem ...
- 洛谷P1807 最长路_NOI导刊2010提高(07)
//拓扑排序求最长路 #include<bits/stdc++.h> #include<queue> using namespace std; const int INF=0x ...