【发布时间】:2012-08-19 06:21:20
【问题描述】:
我有一个 C 程序,它接收一个 64 字节的 char 数组(通过 USB 传递)。根据第一个字节(指示命令类型),我想在 char 数组上“强加”一个结构以使代码更清晰。
例如,如果命令代码是 10,我会期望类似:
struct
{
uint8_t commandNumber;
uint16_t xPos;
uint16_t yPos;
int32_t identificationNumber;
} commandTen;
所以我想将我的 char packet[64] 'onto' commandTen 强制转换,然后使用以下内容访问字段:
localVar = commandTenPacket->xPos;
如何在 C 中实现这一点?
提前致谢!
【问题讨论】:
-
您需要“打包”结构以消除对齐填充。
-
这不能便携。你可能会更好地读取字节并直接从字节构建值。
-
在我看来关键字
union对处理这个问题大有帮助。 -
您可能会发现这篇文章很有用:stackoverflow.com/q/371371/951890
-
也许我应该补充一点,该代码适用于资源非常有限的 AVR 微控制器,因此可移植性不如节省 RAM 重要。由于我有 64 字节的缓冲区,因此我正在寻找一种以更易读的方式访问它的方法,尽可能不使用更多 RAM(这就是为什么不希望使用库或复制到局部变量的原因)。