判断.net中在windows系统下的字节序
2018-06-17 22:00:11来源:未知 阅读 ()
字节序,是指字节在内存中的存储顺序。其又分为大端字节(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
对于小端字节序,它的存放顺序为:
0x00000001 | 0x00000002 | 0x00000003 | 0x00000004 |
0000 0100 | 0000 0011 | 0000 0010 | 0000 0001 |
对于大端字节序,它的存放顺序为:
0x00000001 | 0x00000002 | 0x00000003 | 0x00000004 |
0000 0001 | 0000 0010 | 0000 0011 | 0000 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,他存放在内存的高地址中。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3 之 判断闰年小实例 2019-08-13
- 输入某年某月某日,判断这一天是这一年的第几天 2019-07-24
- Python-03-流程控制 2019-07-24
- Python中sys模块sys.argv取值并判断 2019-04-25
- while,for,if输入账号密码判断(还请各位大牛能够优化,本 2019-04-20
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash