big-endian和litte-endian转换 大端字节次序,小端字节次序转换
原文地址:http://blog.csdn.net/callinglove/article/details/7840421
计算机都是以八位一个字节为存储单位,那么一个16位的整数,也就是C语言中的short,在内存中可能有两种存储顺序big-endian和litte-endian.考虑一个short整数0xAF32(0x32是低位,0xAF是高位),把它赋值给一个short变量,那么它在内存中的存储可能有如下两种情况:
大端字节(Big-endian):较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址。
——————————————--------
| 0x2000 | 0x2001 |
------------------------------------
| 0xAF | 0x32 |
------------------------------------
小端字节(Big-endian):字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中。
——————————————--------
| 0x2000 | 0x2001 |
------------------------------------
| 0x32 | 0xAF |
------------------------------------
判断计算机的存储方式:
/********大端返回0;小端返回0*******/ int checkCPU() { union w { int x ; char y ; }c ; c.x = 1; return (c.y==1)) }
大小端转换:
#include<stdio.h> typedef unsigned int uint_32 ; typedef unsigned short uint_16 ; #define BSWAP_16(x) \ (uint_16)((((uint_16)(x) & 0x00ff) << 8) | \ (((uint_16)(x) & 0xff00) >> 8) \ ) #define BSWAP_32(x) \ (uint_32)((((uint_32)(x) & 0xff000000) >> 24) | \ (((uint_32)(x) & 0x00ff0000) >> 8) | \ (((uint_32)(x) & 0x0000ff00) << 8) | \ (((uint_32)(x) & 0x000000ff) << 24) \ ) uint_16 bswap_16(uint_16 x) { return (((uint_16)(x) & 0x00ff) << 8) | \ (((uint_16)(x) & 0xff00) >> 8) ; } uint_32 bswap_32(uint_32 x) { return (((uint_32)(x) & 0xff000000) >> 24) | \ (((uint_32)(x) & 0x00ff0000) >> 8) | \ (((uint_32)(x) & 0x0000ff00) << 8) | \ (((uint_32)(x) & 0x000000ff) << 24) ; } int main(int argc,char *argv[]) { printf("------------带参宏-------------\n"); printf("%#x\n",BSWAP_32(0x12345678)); printf("%#x\n",BSWAP_16(0x1234)) ; printf("------------函数调用-----------\n"); printf("%#x\n",bswap_32(0x12345678)); printf("%#x\n",bswap_16(0x1234)) ; return 0 ; }
Linux编程函数:
#include <stdio.h>
struct ST{ short val1; short val2;
};
union U{ int val; struct ST st;
}; int main(void)
{ int a = 0; union U u1, u2; a = 0x12345678; u1.val = a; printf("u1.val is 0x%x\n", u1.val); printf("val1 is 0x%x\n", u1.st.val1); printf("val2 is 0x%x\n", u1.st.val2); printf("after first convert is: 0x%x\n", htonl(u1.val)); u2.st.val2 = htons(u1.st.val1); u2.st.val1 = htons(u1.st.val2); printf("after second convert is: 0x%x\n", u2.val); return 0;
}
big-endian和litte-endian转换 大端字节次序,小端字节次序转换相关推荐
- 大端模式和小端模式的转换
1 . 1 大小端模式的概念 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,数据从高位往低位 ...
- 大端字节序小端字节序(网络字节序主机字节序)
大端字节序:整数的高位字节存储在内存的低地址处,低字节存储在内存的高地址处. 小端字节序:整数的高位字节存储在内存的高地址处,低字节存储在内存的低地址处. 一般pc大多采用小端字节序,也称为主机字节序 ...
- Java大端字节和小端字节
1.什么是大端和小端 1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端. 2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的 ...
- 字节序、大端字节序(Big Endian)、小端字节序(Little Endian)总结
什么是字节序? 字节序,简单来说,指的是 超过一个字节的数据类型在内存中存储的顺序 有几种字节序? 大端字节序(Big Endian) 高位字节数据存放在内存低地址处,低位字节数据存放在内存高地址处. ...
- java 大端字节序_理解字节序 大端字节序和小端字节序
以下内容参考了 http://www.ruanyifeng.com/blog/2016/11/byte-order.html https://blog.csdn.net/yishengzhiai005 ...
- 【转】理解字节序 大端字节序和小端字节序
转自:https://www.cnblogs.com/gremount/p/8830707.html 以下内容参考了 http://www.ruanyifeng.com/blog/2016/11/by ...
- 什么是大端序和小端序,为什么要有字节序
什么是字节序 字节序,又称端序或尾序(英语中用单词:Endianness 表示),在计算机领域中,指电脑内存中或在数字通信链路中,占用多个字节的数据的字节排列顺序. 在几乎所有的平台上,多字节对象都被 ...
- C语言之大端模式与小端模式
大端模式与小端模式的定义(字节序) 大端模式:数据的高字节在低地址,低字节在高地址 小端模式:数据的高字节在高地址,低字节在低地址 怎么判断系统是大端模式和小端模式 首先来看两个知识点: (1)联合体 ...
- 计算机网络——网络字节序(大端字节序(Big Endian)\小端字节序(Little Endian))
网络字节序 网络字节序 1.网络字节序 (Network Byte Order)和本机转换 2.字节序转换函数 网络字节序 1.网络字节序 (Network Byte Order)和本机转换 1.大端 ...
- 大端字节序与小端字节序的转换
逐步加深对字节操作的理解,记录一下大端字节序与小端字节序的转换,开发环境是vs2010,项目类型是控制台输出程序,下面是代码实现: // ByteOrder_demo.cpp : 定义控制台应用程序的 ...
最新文章
- 『假如我是面试官』RabbitMQ我会这样问!
- 最短路径算法 Floyd-傻子也能看懂的弗洛伊德算法(转)
- nginx出现404和403错误
- ORB SLAM学习--跑自己数据集图片序列或摄像头或视频(转)
- C/Cpp / Cpp 中 struct 和 class 区别
- AOJ - 邻家割草(最小割)
- 【51单片机快速入门指南】2.2:任意位/任意长度数码管显示数字、小数
- void类型及void指针
- 常用电源及稳压芯片(一)
- 鳗鱼刺多怎么处理图像_图像二值化处理
- 转: Rust中的Pin详解 【Rust语言中文社区】
- 手把手教你编写-微信机器人
- docker客户端和服务端
- Qt 使用阿里图标库
- 基于JAVA幼儿园综合管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
- 利用系统自带命令杀毒
- css 文字溢出...显示,hover时显示隐藏文字
- 使用GAN的图像超分辨率功能彻底消灭模糊图
- geotools 的书籍
- Linux下QT串口通过无线模块收发十六进制数据
热门文章
- 谷歌发布人类动作识别数据集AVA,精确标注多人动作
- helm v3.8.0 命令入门指南
- 时钟日历c语言源代码,日历时钟DS12887或146818的C语言源程序.doc
- 51单片机-实验元器件
- 中国信通院魏博锴:云原生混部标准解读
- value=“btnMsg“ conflicts with v-model on the same element because the latter already expands to
- STL常见面试题总结
- Android重力传感器研究
- android切换默认应用_如何在Android上设置默认应用
- 人脸识别特征介绍以及难题概括