网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.gdb基础.
.Windows中的消息详细列表.
.More Effective C++:类型转换.
.用C++实现可重用的数学例程.
.Windows Sockets:端口和套接字地.
.C++习题与解析(重载-03).
.C语言程序开发经典实例之五.
.如何对数据流 INSERT、APPEND.
.图片模糊、锐化、雕刻.
.菜鸟也能搞定C++内存泄漏.
.C++习题与解析-类和对象.
.C语言高效编程的几招.
.C++开发常用工具“群英会”.
.C++中用vectors改进内存的再分配.
.利用C++ Builder进行精确计时.
.C与脚本的混合编程.
.C++ Builder 设计工具.
.C语言初学者入门讲座 第八讲 转移.
.算术编码用c++的实现.
.在C/C++中如何构造通用的对象链表.

网络字节序的问题

发表日期:2008-3-8



  最近接触到网络字节序的概念 查了查资料 不是很明白 先引用一段材料:

字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端、大端两种字节顺序。小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处;大端字节序是高字节数据存放在低地址处,低字节数据存放在高地址处。基于X86平台的PC机是小端字节序的,而有的嵌入式平台则是大端字节序的。因而对int、uint16、uint32等多于1字节类型的数据,在这些嵌入式平台上应该变换其存储顺序。通常我们认为,在空中传输的字节的顺序即网络字节序为标准顺序,考虑到与协议的一致以及与同类其它平台产品的互通,在程序中发数据包时,将主机字节序转换为网络字节序,收数据包处将网络字节序转换为主机字节序。

在本Linux的书里介绍到INTEL的CPU使用的小端字节序 其他比MOTOROLA
68000系列CPU使用的是大端字节序 假如不转换 将数据通过网络发出时 比如MOTOROLA发一个16位数据:0X1234 传送到INTEL时
就被INTEL解释为0X3412 也就是4660成了13330 所以有时候需要一些函数来进行大小端字节序的转换

关于这大小字节序的概念不是很想的明白 数据在
内存里是具体怎么存放的形式?为什么会有CPU解释的不同?数据不是按12345678……这样的顺序一直排列的么?希望大人赐教 谢谢

不就是大小印地安记法吗
1)从低到高存 (liittle edian)
例:0x1234
内存中是0x34 0x12
2)从高到低存 (big edian)
例:0x1234
内存中是0x12 0x34

如: 一个多字节值 0xFECDBA98,内存从地址100开始存放

降序: FE CD BA 98---->对应地址100 101 102 103

升序: 98 BA CD FE ---->same above

注重,我们的书写表示法是从低字节位--->高字节位


至于为什么CPU解释不同,可能是由于不同的体系构架在起始竞争时人为地制造

和对手不兼容性......害的我们这么惨,一碰到移植就要注重这个

C代码的移植相对简单原因之一就是由于C的连续存储数据永远保持从低地址到高

地址的索引........

小端字节序就是升序排列那种?
我们的书写表示法是从低字节位--->高字节位 这个是什么意思呢?难道FECDBA98是从低到高(从左到右)吗?

还有它排列是按单个字节来 还是按数据类型的?比如说是INT型就按两个两个排 就象0X1234 和0X3412 而不是0X1234 和0X4321?

我们的书写表示法是从低字节位--->高字节位 这个是什么意思呢?难道FECDBA98是从低到高(从左到右)吗?"




"还有它排列是按单个字节来 还是按数据类型的"

对于多字节数据才有这么一出

这样理解吧
譬如:
内存地址生长方向为: 从左到右 由低到高(这是不变的)

数据为: 0x89ABCDEF

降序(Big-endian)大端字节序 存储时 由左到右

升序(Little-endian)小端字节序 存储时 由右向左

可以自己编一个小程序验证一下(用C的数组)
更简单的调用VC里的checkEndian()
上一篇:VC++下使用ADO编写数据库程序(1) 人气:1895
下一篇:gdb使用 人气:1556
浏览全部C/C++的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐