<分区>
我有一系列字节通过传输介质传入(一次一个字节),我需要将其重组为消息结构。两端共享一个公共(public)头文件,其中消息结构被打包
。两端也使用相同的编译器编译,尽管考虑到打包属性应该无关紧要。这在 C 中很简单,但我必须将此代码放入用 C++ 编写的更大的代码库中。我曾尝试使用 C++ 中的各种转换模式,但我似乎无法正确使用它们。
我用 C 编写嵌入式固件已有一段时间,但大部分时间只阅读 C++ 代码。那么,在 C++ 中执行类似操作的“正确”方法是什么?假设 recv_msg
是一个回调函数,当有新字节可供读取时执行:
void recv_msg(uint8_t data)
{
static int bytes_recvd = 0;
static struct msg = {0};
((uint8_t*)&msg)[bytes_recvd] = data;
if(++bytes_recvd == sizeof(struct msg)){
printf("Msg received\n");
bytes_recvd = 0;
g_msg_recvd_flag = 1;
}
}
我遇到的问题是 C++ 的严格类型不允许我将 msg
任意转换为 uint8_t
数组。这样一来,一次一个字节地重建消息结构就非常简单了。
假设我有 bytes_recvd
和 struct msg
作为相关 C++ 类的成员,如何在 C++ 中完成类似的事情?