星空网 > 软件开发 > ASP.net

判断.net中在windows系统下的字节序

  字节序,是指字节在内存中的存储顺序。其又分为大端字节(Big-Endian)序和小端字节序(Little-Endian)。

  以下摘自百度百科:

  a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。

  b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

  什么意思呢?

  我们有一个int32的值:16909060,它的二进制表示方式是:0000 0001,0000 0010,0000 0011,0000 0100 (为了方便观看,我加了','号)

  那么,在内存中我们需要4个字节来保存这个整型数值。假设需要的内存地址为:0x00000001,0x00000002,0x00000003,0x00000004

  对于小端字节序,它的存放顺序为:

 

0x000000010x000000020x000000030x00000004
0000 01000000 00110000 00100000 0001

  对于大端字节序,它的存放顺序为:

0x000000010x000000020x000000030x00000004
0000 00010000 00100000 00110000 1000

  那么,在.net中是采用哪种字节序呢?

  先下结论:.net在内存中采用的是Little-Endian。 

  测试原理:利用 Buffer.BlockCopy 方法将一个int32位的值复制到int16值中。 Buffer.BlockCopy  方法将指定的count个数组从src复制到dst,并能指定开始复制的偏移位置。BlockCopy 方法使用内存的偏移量访问 src 参数数组中的字节,而不是使用索引或数组上下限等编程构造。注意,是内存的偏移量,即该方法是从内存中一个一个字节的复制值,而不是直接复制数值结构

  以下是源代码:

 1      var sours = new int[] { 175 }; 2       var dest = new short[1]; 3       var sp = 0; //源序列偏移地址 4       var dp = 0; //目标位置偏移地址 5       var count = 2; //一次拷贝字节数 6  7       Buffer.BlockCopy(sours, sp, dest, dp, count); 8       foreach (var i in dest) 9       {10         Console.WriteLine(i);11       }  

  结果输出:175.

  代码里一次复制2个字节,整好是一个int16所需要的字节大小。而源数组的起始偏移量是0.如果我们把sp的值改成2,即偏移2个字节,最后的输出就变成了0.这是因为175的高位字节是0000 0000,0000 0000,他存放在内存的高地址中。

 




原标题:判断.net中在windows系统下的字节序

关键词:.NET

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

海外开户流程:https://www.goluckyvip.com/tag/72782.html
外国投资者专用账户:https://www.goluckyvip.com/tag/72784.html
google海外开户:https://www.goluckyvip.com/tag/72785.html
个人境外开户违法么:https://www.goluckyvip.com/tag/72787.html
产品变体:https://www.goluckyvip.com/tag/7279.html
境外预约开户:https://www.goluckyvip.com/tag/72790.html
七月份适合去日本旅游吗 7月份去日本哪里好玩:https://www.vstour.cn/a/363192.html
凤岗汽车站到松山湖风景区 松岗汽车站到凤凰山怎么坐车:https://www.vstour.cn/a/363193.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流