大端模式和小端模式-以前犯过这样的错误

    技术2023-06-28  77

    大端模式和小端模式-以前犯过这样的错误

    前言大端与小端分个类吧为啥要分模式如何检测大小端模式我个人遇到的问题

    前言

    之前的项目中接触过这个问题,但是实在是难以记忆,咱们就当做是重新学习好了。

    大端与小端

    定义其实是很简单的,大端就是咱们习惯从低地址看向高地址时的阅读顺序,我举个32int的例子好了,从低地址到高地址分别是高位字节和低位字节。小端模式就反过来,懂?

    分个类吧

    像我工作中使用的ARM芯片,默认是小端模式(就是读起来不顺畅),但是可以在程序中设置CPU的某些寄存器,实现大端模式和小端模式的切换。也就是说,ARM在硬件上同时支持大端模式和小端模式(默认)。 咱们用的AMD或者intel的CPU,反正是x86结构的,它是小端模式。 网络字节序就是在tcp-ip上传输的数据格式是大端模式。

    为啥要分模式

    这咋说呢,两种方式各有各的好处吧,发展成这个样子可能有它的历史原因。咱们也就尊重历史好了。

    如何检测大小端模式

    这个非常简单,直接上代码,相信你一眼就能看明白:

    int CheckSystem() { int a = 1; if (*((char *)(&a)) == 1) { return 1; } return 0; }

    我个人遇到的问题

    当时就是做一个tcp相关的功能,但是发现我底层传输的数据和最后人家上位机收到的数据根本就不是一回事情,直接反了。于是在了解过大端小端之后就清楚了。

    Processed: 0.014, SQL: 9