0
点赞
收藏
分享

微信扫一扫

大小端判断(新手入门)

天悦哥 2022-09-21 阅读 61

前文

关于如何判断大小端,我先给大家讲解一下大小端是如何判断的,接下来将由画图的形式给大家解释: image.png 在红色箭头指向的地方,就是我们输入的值,他的值是由高地址到低地址的存放进行的,下面的小端存放是将高地址存放到高地址,但是在计算机内存中,地址是由高到低的,于是我们可以看见图片里面小段存放是44 33 22 11,而大端存放的却是11 22 33 44,我们可以看到vs的右侧监视窗口,他的内存存放就是44 33 22 11,这就说明,在vs这个编程软件里面,实行的是小端存放,这里给大家看一张图 image.png 大家可以看见大小端其实就是字节在内存中存放的顺序,接下来我给大家讲解如何去判断大小端。

正文

因为我们的要判断是否是大小端,这里有两种方法。

第一种

image.png 因为是要读取一个字节,所以我们读取到的是高地址的字节,其实0x01就是0x00 00 00 01的意思,只不过所写成了01前面的0就忽略了,那么就可以判断,因为读取的第一个字节是高地址的字节,看高地址的字节是00,还是01,我们就可以用图片中的代码进行判断, image.png image.png 我们就可以看到,在vs中我们的字节存储顺序就是小端存储,那我们如何用函数的形式表达出来呢 image.png 大家看,这就是用函数的方法表达出来的大小端判断 但是还可以再精简一些: image.png 我们直接将a取地址转化为char*类型,再进行解引用,就是我们想要得到的那个数字,这样是不是更加的快捷,好的第一种方法讲完了,下面是第二种方法

第二种

不知道大家有没有学过共用体(联合体)如果大家学过这个,那么就可以继续深入,因为下面就是如何用共用体判断大小端,先把代码给大家放出来; image.png 因为是共同体嘛,同时用一块内存空间,就是我如果给char c赋值那么我的int a的值也会变如果我给int a赋值那么我的char c也会变,所以我们的联合体一般都是一次用一个,我给大家画个图: image.png 因为我在前面讲了,他们用的是同一块内存,所以如果我从里面将char c打印出来,就是 image.png 那就可以通过返回值看出是大小端,如果是大端那么我们返回的应该是0,小端返回的应该是1,所以我们看下面打印的 image.png 好的,是小端存储,那么这次的课程就讲到这里了,有什么不完全的大家可以给我私信,我也会努力改进的 谢谢大家!!!

举报

相关推荐

0 条评论