什么是大端和小端
来看一个例子:0x0012ff40,是16进制的数据,每两位是一个字节,计算机的地址是以字节为单位的,那么就会存在两种存储方式。
第一种:大端存储模式
![](https://i-blog.csdnimg.cn/blog_migrate/0c83003e6026e45f7ea8e37f0df3e8c1.png)
第二种:小端存储模式
![](https://i-blog.csdnimg.cn/blog_migrate/ef294d23d8621d6535ce53c006f25c3c.png)
乍一看可能第二种比较奇怪,但其实是最容易理解的,例中,40 是最小的一位,自然先把它拿出来,放到低地址处,从低到高,一次拿一个字节,同样从低到高,在内存中一个一个的放好。
如何判断编译器是大端还是小端呢
直接看代码
![](https://i-blog.csdnimg.cn/blog_migrate/07629d0ca17d393eff6d2440eceff8e7.png)
很简单,看1的16进制是0x 00 00 00 01,&a取出的其实是最低的那个地址,如果是小端,那存的就是01,如果是大端,存的就是00。强转为char*就只会访问这一个字节了。
![](https://i-blog.csdnimg.cn/blog_migrate/7ecf2cd250a6b88fd5b5d3f7f7b5ff44.png)
vs2022是小端,事实上,大多数编译器都是小端,不信那你试试看。