将多个变量打包到一个字符串中
Packing multiple variable into one string
字符流被发送到通信设备。出于可读性的目的,我将初始配置编写为变量:
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
看起来不是一个可行的选择,因为struct
不string
,字符串的大小各不相同,尽管是一次性声明的东西。在海湾合作委员会编译
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
表示的可变长度数据。
我想你可能有更多的考虑,而不仅仅是把东西打包得很紧。
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 如何检查一个c++字符串中有多少相同的字符/数字
- 获取用C/C++打印的最后一个字符串
- cin >> int 给定一个字符串将 int 赋值为 0
- 我如何通过引用将 c++ 字符串分配给另一个字符串
- 使用另一个字符串从字符串中删除空格
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 当分配一个字符串值并稍后通过分配另一个值进行更改时C++如何管理内存?
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- C++为 void 指针分配一个字符串
- 如何在使用 getch 后在另一个字符串的末尾连接一个字符串
- 给定一个单词数组和一个字符串,如何计算给定字符串中的所有单词
- 如何在另一个字符串的x位置插入一个字符串?
- 有没有办法我可以在 C++ 中使用 if 语句来说明如果一个字符串不是两个名称的 eqal,它会给出一个输出,ATM i
- 在另一个字符串中插入文件扩展名之前的字符串
- 我有一个返回字符串向量的函数.它需要两个字符串,并且返回一个字符串中缺少的字符串
- C++自定义流操纵器,用于更改流上的下一个字符串
- 从类返回一个字符串 — 奇怪的行为
- 从我的2d数组中的一列返回的字符串值被压缩为一个字符串(在Mac os上打开Windows txt文件)
- 你能从"volatile const char*"构造一个字符串吗?(不使用`const_cast`