0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

四种方法教你判断设备的字节序

学益得智能硬件 来源:学益得智能硬件 2024-11-28 10:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

如何判断设备的字节序,提供 4 种方法给大家参考。

首先就是从概念入手。

所谓小端字节序,高字节存放在高地址,低字节存放在低地址;大端字节序反过来。

定义一个无符号 short 类型,初始化成 0x0102,定义一个 char 类型指针,保存 num 的地址。

int main()
{
    unsigned short num = 0x0102;


    unsigned char *p = (unsigned char *)#


    if (p[0] == 0x02)
        printf("小端字节序
");
    else if (p[0] == 0x01)
        printf("大端字节序
");
        
return 0;
}

如果 p[0] 是 0x02,说明低地址保存了低字节,设备就是小端。

如果 p[0] 是 0x01,说明低地址保存了高字节,设备就是大端。

第二个,使用联合体。

联合体的特点是所有成员共享同一块内存。

union Test
{
    char p[2];
    short val;
};

在这个联合体中,char 类型的数组和 short 类型变量占用了同一块内存,数组的第 0 个元素一定存放在低地址。

如果 p[0] 保存的是 0x02,说明低地址保存了低字节,设备是小端。反之,是大端。

int main()
{
    union Test t;
    t.val = 0x0102;
    
    if (t.p[0] == 0x02)
        printf("小端字节序
");
    else if (t.p[0] == 0x01)
        printf("大端字节序
");
        
return 0;
}

这种方法跟第一种差不多。

第三个,通过宏来判断。

比如在 Linux 系统中,包含头文件,使用 BYTE_ORDER 就能直观的看出字节序。

#include 


int main()
{
    if (__BYTE_ORDER == __LITTLE_ENDIAN)
        printf("小端字节序
");
    else if (__BYTE_ORDER == __BIG_ENDIAN)
        printf("大端字节序
");

return 0;
}

第四个,使用结构体位域。

这个方法同样是从概念入手,判断 p[0] 这个低地址保存的是低字节还是高字节。

#include 


struct Test
{
    unsigned int a : 8;
    unsigned int b : 8;
    unsigned int c : 16;
};


int main()
{
    struct Test t = {0x01, 0x02, 0x0304};
    unsigned char *p = (unsigned char *)&t;


    if (p[0] == 0x01)
        printf("小端字节序
");
    else if (p[0] == 0x04)
        printf("大端字节序
");


    return 0;
}

不过这个方法不太推荐,位域的具体布局取决于编译器,跟环境有关,所以这种方法,参考下就行。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 设备
    +关注

    关注

    2

    文章

    4901

    浏览量

    73963
  • 字节
    +关注

    关注

    0

    文章

    44

    浏览量

    14425

原文标题:四种方法判断设备的字节序

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    驱动之路#24:Linux设备四种读写模型

    Linux 设备四种读写模型——其实核心就 4 方式:查询、休眠 - 唤醒、poll、异步通知。它们不是中断本身,而是 “应用 - 驱动” 的上层交互逻辑(中断是底层硬件触发机制),但高效交互几乎都依赖中断实现。
    的头像 发表于 05-06 16:26 5061次阅读

    变频器四种制动方式

    解决的核心问题。目前主流的变频器制动方式主要包括能耗制动、回馈制动、直流制动和电容制动四种,每种方式各具特点,适用于不同的工况场景。
    的头像 发表于 03-25 16:31 365次阅读

    低成本CAN扩展方案怎么选?CSM331A四种模式一次说清

    MCU需要CAN功能但预算有限?CSM331A协议转换芯片用SPI/UART就能扩展,四种模式从快到稳任你选。ZLG致远电子推出的CSM331A协议转换芯片,配合一个CAN收发器,就能通过SPI
    的头像 发表于 02-09 11:50 575次阅读
    低成本CAN扩展方案怎么选?CSM331A<b class='flag-5'>四种</b>模式一次说清

    提高石英晶体振荡器相位噪声性能的4种方法

    如果你正在设计一款用于5G基站或精密雷达的振荡器,单纯靠一种方法是不够的。你需要“SC切割晶体 + 点封装”作为基础,配合“电子补偿”电路来应对动态环境,同时辅以“超低噪声电源”和“精密温控”。这套组合拳,就是目前业界公认的“硬核”降噪方案。
    的头像 发表于 01-16 16:38 1470次阅读
    提高石英晶体振荡器相位噪声性能的4<b class='flag-5'>种方法</b>

    是德示波器DSOX1202A与电脑的四种连接方式及操作步骤详解

    是德科技(Keysight)DSOX1202A示波器作为高精度电子测量设备,广泛应用于电子工程、通信测试与自动化调试场景。为实现数据实时采集、波形分析与远程控制,用户需通过USB、LAN、GPIB或串口将示波器与电脑互联。本文将结合官方指南与实操经验,系统介绍四种连接方式
    的头像 发表于 01-13 17:48 2056次阅读
    是德示波器DSOX1202A与电脑的<b class='flag-5'>四种</b>连接方式及操作步骤详解

    嵌入式中的浮点型数据转换为字节类型的三种方法

    一般是以字节的形式进行数据交互。要想传输一个浮点数需要把浮点数转换为字节的形式。 MCU不能直接保存浮点型数据,能直接保存的是0或1。把数据保存到MCU中比较常用的保存方法就是以字节
    发表于 01-07 06:28

    为什么会有小端字节序

    ,后读到的就是低位字节。小端字节序正好相反。 理解这一点,才能理解计算机如何处理字节序。 处理器读取外部数据的时候,必须知道数据的字节序,将其转成正确的值。然后,就正常使用这个值,
    发表于 12-15 06:24

    有多少种方法可以进行频响曲线测量?

    。下面列出APx500软件包含的至少10种方法都可以进行频响曲线的测量:FrequencyResponseContinuousSweepAcousticRespo
    的头像 发表于 11-14 11:29 1405次阅读
    有多少<b class='flag-5'>种方法</b>可以进行频响曲线测量?

    DBC解析:信号位置与物理值计算

    起始位、位数和字节序定义。在案例中,发动机转速信号的起始位是24,位数是16,摩托罗拉的字节序是24。因此,在收到的原始CAN(FD)报文的64位数据中,在摩托罗
    的头像 发表于 10-31 11:37 744次阅读
    DBC解析:信号位置与物理值计算

    示波器探头衰减怎么判断?3 种方法 + 常见问题,新手也能学会​

    数据出现偏差,甚至误判电路故障。本文聚焦于示波器探头衰减判断的核心需求,详细拆解了“直观检查、标准信号测试、对比验证”这三实操方法,并搭配常见问题解答,内容通俗易懂。无论是电子新手还是资深工程师,都能快速
    的头像 发表于 10-23 09:34 967次阅读
    示波器探头衰减怎么<b class='flag-5'>判断</b>?3 <b class='flag-5'>种方法</b> + 常见问题,新手也能学会​

    一图看懂绿电直连的四种玩法

    通过 “总览框架 + 分模式图解” 的形式,用可视化逻辑拆解绿电直连的四种核心模式,涵盖每种模式的核心特征、适用场景、参与主体三大关键信息,帮你快速区分不同 “玩法” 的差异与适配性。
    的头像 发表于 10-15 10:18 1719次阅读
    一图看懂绿电直连的<b class='flag-5'>四种</b>玩法

    如何判断谐波检测设备的环境干扰强度?

    、强干扰”,为设备选型、误差余量预留提供依据。以下是具体可落地的方法,覆盖现场快速排查与精准定量测量: 一、定性判断:快速识别干扰场景(无需专业工具,适合现场初步排查) 通过 “场景特征、设备
    的头像 发表于 10-13 17:26 1040次阅读

    从入门到精通:基于开源代码的BLE四种模式开发详解

    Bluetooth Smart,是蓝牙4.0及更高版本引入的低功耗无线通信技术,专为低带宽、间歇性数据传输的物联网(IoT)和穿戴设备设计。   一、Air8000蓝牙大模式 Air8000蓝牙支持四种模式,分别是中心
    的头像 发表于 10-09 18:00 807次阅读
    从入门到精通:基于开源代码的BLE<b class='flag-5'>四种</b>模式开发详解

    全网最全CSA3412,BCT4340,VL162,MCU/ USB3.1 正反插10G bps四种解决方案

    CSA3412,BCT4340,VL162,MCU/ USB3.1 全网最全正反插10G bps四种解决方案
    的头像 发表于 09-25 03:06 1063次阅读
    全网最全CSA3412,BCT4340,VL162,MCU/ USB3.1 正反插10G bps<b class='flag-5'>四种</b>解决方案

    RDMA简介3之四种子协议对比

    RDMA协议共有四种子协议,分别为InfiniBand、iWARP、RoCE v1和RoCE v2协议。这四种协议使用统一的RDMA API,但在具体的网络层级实现上有所不同,如图1所示,接下来将
    发表于 06-04 16:05