字节顺序
来源:互联网 发布:35岁男人的爱情观 知乎 编辑:程序博客网 时间:2024/03/29 17:00
对于不同软件和硬件之间的差异,在技术人员看来除了叹息,不会有更多的情绪
,这样的现象是多种原因造成的,可是对于人为的差异,我总是痛恨不已,字节
序就是这样一个列子。
简单的说,字节序就是在处理数字时,机器和实际数字高低位顺序,也就
是:
数字:0x10 00 20
little-endian机器:20 00 10
big-endian 机器:10 00 20
这样的差异是由 CPU 决定的,当前流行的 cpu 据我所知IBM的power-pc
是 big-endian 的,其他基本是 little-endian 的。
这样的差别导致在异种平台交换数据时可能发生问题,当然在异种平台间交换数据是
一个敏感的问题,有很多方法可用,这里不讨论。不过在编程时,也会有这样的
问题,看一下这种情况:
结果:
这个语句可以用来判断机器字节序.
如果在字节序不同的平台间的交换数据必须进行转换,比如对于 int 类型:
big-endian 写入文件
little-endian 读出后
这仅仅是个列子,在异钟平台间直接传递二进制数据,即使不存在字节序的问题,也不是一个明智的方法,作
为可选的方式就是使用文本来交换数据,这样至少可以避免字节序的问题。
很多的加密算法为了追求速度,都会采取字符串和数字之间的转换,在计算完毕
后,必须注意字节序的问题,在某些实现中可以见到使用预编译的方式来完成,
这样很不方便,如果使用前面的语句来判断,就可以自动适应了。
,这样的现象是多种原因造成的,可是对于人为的差异,我总是痛恨不已,字节
序就是这样一个列子。
简单的说,字节序就是在处理数字时,机器和实际数字高低位顺序,也就
是:
数字:0x10 00 20
little-endian机器:20 00 10
big-endian 机器:10 00 20
这样的差异是由 CPU 决定的,当前流行的 cpu 据我所知IBM的power-pc
是 big-endian 的,其他基本是 little-endian 的。
这样的差别导致在异种平台交换数据时可能发生问题,当然在异种平台间交换数据是
一个敏感的问题,有很多方法可用,这里不讨论。不过在编程时,也会有这样的
问题,看一下这种情况:
代码: |
*((short*)"AB") >> 8 |
代码: |
little-endian = 'B' big-endian = 'A' |
如果在字节序不同的平台间的交换数据必须进行转换,比如对于 int 类型:
big-endian 写入文件
代码: |
int i = 100; write( fd, &i, sizeof(int) ); |
代码: |
int i; read( fd, &i, sizeof(int) ); char buf[sizeof(int)]; memcpy( buf, &i, sizeof(int) ); for( i = 0; i < sizeof(int); i ++ ) { int v; v = buf[sizeof(int) - i - 1]; buf[sizeof(int) - 1] = buf[i]; buf[i] = v; } memcpy( &i, buf, sizeof(int) ); |
为可选的方式就是使用文本来交换数据,这样至少可以避免字节序的问题。
很多的加密算法为了追求速度,都会采取字符串和数字之间的转换,在计算完毕
后,必须注意字节序的问题,在某些实现中可以见到使用预编译的方式来完成,
这样很不方便,如果使用前面的语句来判断,就可以自动适应了。
- 字节顺序
- 字节顺序
- 字节顺序
- 字节顺序
- 字节顺序
- 字节顺序
- 字节顺序
- 字节顺序
- 字节顺序
- 字节顺序
- 字节顺序
- 字节顺序
- 字节顺序
- 字节顺序
- 字节顺序
- 字节顺序
- 字节顺序 & 网络字节顺序
- 字节顺序&字节对齐
- 用Visual C#实现局域网点对点通讯
- 软件配置管理沙龙活动记录和体会20041212
- c# singleton 的改进
- 命令行解释器概述
- Asp.Net中连接Oracle
- 字节顺序
- [收藏整理] 理解iptables 2
- 修正JBuilder编辑器光标位置不准确问题
- Webservice的开发(JBuilder2005+Jboss3.2.5)
- 敏捷
- Eclipse 资源
- simple factory 简单工厂的实现
- struts实现级连菜单
- struts实现树状的菜单