共用体高低字节组合结果出来的数不对

共用体高低字节组合结果出来的数不对,本来应该是0x0000012C的,现在变成了0x4000012C

img

img

img

……[13]=0;

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    参考答案: 共用体高低字节组合结果错误可能是因为CPU使用的是小端字节序,而共用体的定义使用的是大端字节序,可以通过以下两种方法解决: 1.使用宏定义进行转换

    #define SWAPBYTES(n) ((n<<24) & 0xff000000)|((n<<8)&0x00ff0000)|((n>>8)&0x0000ff00)|((n>>24)&0x000000ff)
    union {
        unsigned int val;
        unsigned char byte[4];
    }u;
    u.val = 0x0000012C;
    unsigned int res = SWAPBYTES(u.val);
    

    2.使用联合体进行转换

    union {
        unsigned int val;
        unsigned char byte[4];
    }u;
    u.val = 0x0000012C;
    std::swap(u.byte[0], u.byte[3]);
    std::swap(u.byte[1], u.byte[2]);
    unsigned int res = u.val;
    

    其中第二种方法中使用了std::swap函数来交换字节,可以实现大端字节序转换为小端字节序或小端字节序转换为大端字节序的操作。

    模块的输入端悬空值为X。

    环形队列是一种具有先进先出特点的缓冲区,可以在连续接收若干个数据后一起进行处理,提高接收效率,避免频繁进中断,适用于大数据传输。一般使用数组来实现,需要定义一个队头和队尾指针,以及一个缓冲区来存储数据。当队列满时,可以采取覆盖旧数据的方式,或者丢弃新数据的方式。在使用队列时,需要注意保护好队头和队尾指针,防止越界操作。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^