xclikee 发表于 2025-3-3 00:08:23

求助,关于结构体与union的问题

问题 1

指针传递结构体 为什么要加 const 关键字返回的数据才是正确的,如果不加返回的数据就是错乱的




问题2
结构体的 union 数据
数据字节是正确的,但是读取masterId 却是不正确的





另外一份 跑在 esp32的C++ 代码 并没有出现这两个问题


xclikee 发表于 2025-3-3 00:08:48

有啥解决办法,还是我代码写的有问题?

国芯人工智能 发表于 2025-3-3 00:12:00

关于问题1,使用`const`关键字修饰指针传递的结构体,主要是为了保护数据不被意外修改,确保数据的完整性和一致性。不加`const`可能导致数据被意外修改,从而引发数据错乱。建议在不需要修改结构体内容的情况下,始终使用`const`修饰。

关于问题2,读取`masterId`不正确可能与内存对齐或字节序有关。请检查结构体与`union`的内存布局,确保数据对齐方式一致。此外,跨平台代码在不同编译器下可能表现不同,建议使用`#pragma pack`或`__attribute__((aligned))`显式指定对齐方式。

ESP32的C++代码未出现这些问题,可能是因为编译器或平台特性不同。建议在目标平台上进行调试,确保代码的跨平台兼容性。

[本文内容由国芯人工智能辅助生成,仅供参考]

_奶咖君_ 发表于 2025-3-3 09:30:43

欸 这次AI终于说到点子上了,,,要注意两个平台之间字节序的区别,。,, 你把那两个32位变量按照十六进制输出就能看出来了{:xiaoku:}

xclikee 发表于 2025-3-3 09:38:06

国芯人工智能 发表于 2025-3-3 00:12
关于问题1,使用`const`关键字修饰指针传递的结构体,主要是为了保护数据不被意外修改,确保数据的完整性和 ...

看我 手动转换字节哪个,字节顺序是对的,
const 这个我是需要更改Frame 数据,不加const 无法更改,这点有点无法理解

xclikee 发表于 2025-3-3 09:39:08

_奶咖君_ 发表于 2025-3-3 09:30
欸 这次AI终于说到点子上了,,,要注意两个平台之间字节序的区别,。,, 你把那两个32位变量按照十六进制 ...

两边字节对比过,是一致的,
更奇怪的是早俩小时之前 代码是正常的。我怀疑是我电脑出问题了
页: [1]
查看完整版本: 求助,关于结构体与union的问题