将多个变量打包到一个字符串中

Packing multiple variable into one string

本文关键字:一个 字符串 变量      更新时间:2023-10-16

字符流被发送到通信设备。出于可读性的目的,我将初始配置编写为变量:

unsigned char a1;
unsigned char a2;
unsigned char a3;
unsigned char a4;
unsigned char a5;
std::string a6;
unsigned char a7;
unsigned char a8;

将其紧密打包到变量中以使其完美对齐的最佳方法是什么?到目前为止,我已经想到把所有东西都放进struct.

编辑struct看起来不是一个可行的选择,因为structstring,字符串的大小各不相同,尽管是一次性声明的东西。在海湾合作委员会编译

edit2:将使用打包struct方法,但首先将string转换为c_str。在更好的答案之前,这就是要走的路。

一个打包的结构 ,而不仅仅是一个结构会更合适。

编辑:当然,你不应该使用string作为你结构的一部分,它在回答时跳过了我,但正如其他人指出的那样。您应该使用 str.c_str());string转换为字符数组,然后将其存储在打包结构中。

struct foo {
   unsigned char a1;
   unsigned char a2;
   unsigned char a3;
   unsigned char a4;
   unsigned char a5;
   .
   .
   .
} __attribute__((packed));

海湾合作委员会特定。阅读:http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable-Attributes 另请查看aligned变量属性

或者手动插入虚拟变量以填充编译器可能引入填充的位置。

你真的想把std::string发送到设备? 字符串没有固定大小。 您应该使用 a6.c_str() 并发送所有带有无符号字符数组及其大小的字符?

一个简单的

unsigned char数组就足够了。但struct是更好的方法。

顺便说一句,我认为你不能在struct中使用std::string.你需要那里的unsigned char数组。

我不确定这是否是您的要求,但您可以使用 std::ostringstream 类将所有变量合并到一个字符串中:

std::ostringstream sOutStream;
sOutStream << a1 << a2 << a3 << a4 << a5 << a6 << a7 << a8;
std::string sOutput = sOutStream.str();

如果你想发送一个像std::string这样的对象,你需要使用某种序列化和/或协议。"原始"字符串对象通常包含指向实际字符串数据的指针 - 该指针在链接的另一端将毫无意义。更不用说指针指向的数据不会被发送(没有某种序列化),并且需要某种协议来处理std::string表示的可变长度数据。

我想你可能有更多的考虑,而不仅仅是把东西打包得很紧。

相关文章: