将几个值转换为用于无线电传输的字节串必须避免不需要的字节。在 ARM 目标(32 位)上使用 GCC,我使用“属性((打包))”。该指令是基于 GCC 的(正如我在此处某处读到的),因此通常不可移植 - 我更喜欢。例子:
typedef struct __attribute__ ((packed)) {
uint8_t u8; // (*)
int16_t i16; // (*)
float v;
...
uint16_t cs; // (*)
}valset_t; // valset_t is more often used
valset_t vs;
(*) 值将使用没有 ((packed)) 属性的 4 个字节,而不是根据需要使用一两个字节。用于传输的字节访问:
union{
valset_t vs; // value-set
uint8_t b[sizeof(valset_t)]; // byte array
}vs_u;
使用 vs_u.b[i] 。
- 处理时间在这里并不重要,因为传输速度要慢得多。
- 这里也不考虑 Endian,但在某些情况下可能会应用不同的 C 编译器。
- 对此任务的较早帖子提供了一些见解,但可能同时在 C ?c) 中改进了打包和对齐功能。
C 中是否有更便携的解决方案来执行此任务?