浅谈字节序(Byte Order)及其相关操作

最近在为Tokyo Tyrant写一个.NET客户端类库。Tokyo Tyrant公开了一个基于 TCP协议的二进制协议,于是我们的工作其实也只是按照协议发送和读取一些二进 制数据流而已,并不麻烦。不过在其中涉及到了 “字节序”的概念,这本是计算 机体系结构/操作系统等课程的基础,不过我还是打算在这里进行简单说明,并且 对.NET中部分类库在此类数据流处理时的注意事项进行些许记录与总结。

字节序(Byte Order)

说到程序间的通信,说到底便是发送数据流。我们一般把字节(byte)看作是 数据的最小单位。当然,其实一个字节中还包含8个比特(bit)──有时候我奇 怪为什么很多朋友会不知道bit或是它和byte的关系。当我们拿到一系列byte的时 候,它本身其实是没有意义的,有意义的只是“识别字节的方式”。例如,同样4 个字节的数据,我们可以把它看作是1个 32位整数、2个Unicode、或者字符4个 ASCII字符。

同样我们知道,在一个32位的 CPU中“字长”为32个bit,也就是4个byte。在 这样的CPU中,总是以4字节对齐的方式来读取或写入内存,那么同样这4个字节的 数据是以什么顺序保存在内存中的呢?例如,现在我们要向内存地址为a的地方写 入数据0x0A0B0C0D,那么这4个字节分别落在哪个地址的内存上呢?这就涉及到字 节序的问题了。

每个数据都有所谓的“有效位(significant byte)”,它的意思是“表示这 个数据所用的字节”。例如一个32位整数,它的有效位就是4个字节。而对于 0x0A0B0C0D来说,它的有效位从高到低便是0A、0B、0C及0D——这里您可以把它 作为一个256进制的数来看(相对于我们平时所用的10进制数)。

而所谓大字节序(big endian),便是指其“最高有效位(most significant byte)”落在低地址上的存储方式。例如像地址a写入0x0A0B0C0D之后,在内存中 的数据便是:

时间: 2024-11-08 19:13:23

浅谈字节序(Byte Order)及其相关操作的相关文章

JavaScript数据操作_浅谈原始值和引用值的操作本质_javascript技巧

我的一句话总结:原始值不管是变量赋值还是函数传递都不会改变原值,引用值不管是变量赋值还是函数传递,如果新变量重新赋值,则不会影响原引用值,如新变量是直接操作,就会影响原引用值. 首先明确,值和类型是两个不同的概念.例如,null是null类型的唯一值.undefined是undefined类型的唯一值.而true和false是boolean类型仅有的两个值等.在任何语言中,值的操作都可以归纳为以下3个方面. 复制值:即把值赋值给新变量,或者通过变量把值赋值给另一个变量.属性或数组元素. 传递值:

浅谈java的byte数组的不同写法_java

(由于篇幅原因阐述的不够详细科学,不喜勿喷). 经常看到java中对byte数组的不同定义,粗略整理的一下: 一个字节(byte)=8位(bit),"byte数组"里面全部是"byte",即每一个byte都可以用二进制.十六进制.十进制来表示. 二进制:00010110----->0*2^8 + 0*2^7 + 0*2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 0*2^0 = 22 16进制: 0x16 -----

浅谈网站内页优化的相关技巧

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 大家好,我是小沫seo,很久没有写文章了,今天我给大家分享下网站内页的优化相关技巧,这些都是近期自己的工作总结得到的一些个人的经验,如有其它比较好或者不对的地方希望给位提出互相学习.呵呵!谈到seo,大家大致的会觉得最主要的就是内容和外链了,其实基本的seo也就是这些方面了,因为在seo行业里面有这么一个说法"内容为王,外链为皇&q

浅谈Ajax的缓存机制_AJAX相关

Ajax的缓存机制和浏览器处理资源时的缓存机制是一样的. 三条简单规则: 只要是URL相同的GET请求,浏览器会使用缓存(当然还要看服务器的Cache-Control/Expires/Last-Modified/ETag头的设置). 只要是POST请求,浏览器都不会缓存. Https的请求,浏览器不会缓存(绝大数情况如此,但是也有例外,据说FF浏览器是例外). 补充: 在URL中拼入随机的查询字符串可以使浏览器认为这是一个新的请求,从而不使用缓存. 在Ajax的请求中设置Http头: If-Mo

浅谈综合布线中屏蔽系统相关问题

在综合布线系统中有非屏蔽与屏蔽之分,一般情况,非屏蔽系统使用较为广泛.屏蔽系统综合利用了双绞线平衡的原理以及屏蔽层的屏蔽作用,具有非常好的电磁兼容,实现防止电磁干扰及电磁辐射的功能. 基于屏蔽布线具有的优势能助力互联网的快速发展,很多大型数据中心都是使用屏蔽布线系统,因此使用屏蔽布线系统是以后综合布线的主要趋势之一.而人们对于屏蔽系统,还存在很多疑问. 1.什么是EMC特性? EMC是电磁兼容性,是指电子设备或网络系统具有一定的抵抗电磁干扰的能力,同时不能产生过量的电磁辐射.即要求该设备或网络系

浅谈:新站运营的一些操作手法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 新站运营的方法很多,每个人都有他的运营推广方法,不过笔者总结了一下,且配合自己的实战经验,为大家梳理一下有关新站运营的一些技巧,关键把握住以下思维. 一.网站的定位以及META标签抒写 定位网站是决定之后走向的一个重要的要点.打个比方说,养生型的网站跟医疗型的站点两者联系的比较紧密.如果要做养生型的网站,往往内容做着做着就偏移到了医疗方面的.

浅谈:关键词的一些选择和操作手法

随着百度,谷歌等搜索引擎的日益强大,搜索优化的日趋成熟,网站的搜索推广也变得越来越难.特别是SEOer的同行们,我们以前用的一些手段也随着慢慢退出推广的行列,搜索引擎的更新与算法的改变让很多同行产生很严重的困扰,关键词的排名推广更是我们最大的难题,如何在这么严峻的形势下做好关键词的推广重中之重,下面笔者就谈谈对关键词推广的一点心得,仅供参考. 一.避重就轻,遵从长尾理论 这应该是很多同行朋友都能有所感悟的,不要老是死磕大词,关键词的推广都是相通的,当我们选择一些竞争力度相对较小,较容易推广的长尾

浅谈新站快速收录的核心操作

新站上线如何让搜索引擎快速收录呢?这是很多的新站上线站长比较关注的问题,其实我也不例外,我最近就做了一个新站红枣养生吧,经过我优化网站的努力之下让红枣养生吧一周之内就让比较难收录的百度搜索引擎给收录了,那么新站初期我做了哪些优化让网站如此快的被收录了呢?接下来给大家分享下我的亲自的操作经验: 因为在网络公司上班的缘故,接触到的网站比较多,于是经常的注意到,很多的新站上线之前所做的准备不充分,导致网站的收录时间或者说被百度放出的时候过慢,所以新站上线之前要做的准备如下: 第一:网站的标题.关键词.

浅谈明链和暗链的操作

越来越多的人重视友情链接,因为链接对于一个网站PR的提升和流量的引入起到至关重要的作用.友情链接简分为明链和暗链,这两种链接的含义可以从字面简单理解,明链就是可以看见的链接.暗链有的是可以看见的链接,有的则是隐藏的链接.具体这两种链接怎么操作,笔者试图从以下几个方面分析,如果不对请斧正. 1.链接之前的注意事项 许多新手站长在建站初期不去努力丰富网站内容,往往去大量交换友情链接,唯恐别人不知道自己的网站,但效果却很差,一方面因为自己的网站权重低,流量低,别的网站不愿意交换链接.另一方面,即使交换