0

我在弄清楚如何将我的 uint8 向量转换为字符串流时遇到了一些麻烦。

在输入我得到 uint8 的向量时,前 9 个字节是我的字符串流中不需要的标志,接下来的 2 个字节是我需要作为字符串的一些数据,我们称它们为“name1”,接下来的 2 个字节是另一个名称,以免调用它“name2”,然后是 4 个字节,它们是一些 uint32 数字(但写为 4 个 uint8 字节),让我们称之为“数字”。现在我需要将这些数据传递给 stringstream 但是:

  • name1 和 number2 需要写成字节(byte 0x52 -> char[2]={"5","2"})
  • number 需要转换为 uint32
  • 所有变量都需要在最终字符串流中用分号分隔

所以如果我得到一个像这样的向量:

---一些 9 个字节---, 0x05, 0x00, 0x01,0x00,0x00,0x00,0x08,0x0E, ---一些其他数据---

我需要 stringstream 是这样的:

“0500;0100;2062;”

我已经设法弄清楚如何将数字转换为 uint32:

uint8_t tab[4];
for(int i=4; i!=0; --i)
{
    tab[4-i]=data[i+14];
}
uint32_t* var = (uint32_t*)tab;

有没有更好的方法来做到这一点?

编辑:

如何将 uint8 值作为字符传递给字符串?

例子:

字节输出:0x05

字符串输出:05

我可以使用“<<”运算符将字符串放入字符串流还是不推荐?

4

2 回答 2

0

如果你有一个字符串,只需循环字符串并将字符输出到你的字符串流

std::string name = "name1";
std::stringstream ss;
for(auto c : name)
  ss << std::static_cast<int>(c);
ss << ";";

作为旁注:

uint32_t* var = (uint32_t*)tab;

完全没用,你不需要指针。

于 2015-08-28T08:06:20.847 回答
-1

我不确定这会解决你的问题,但我会采取不同的方法。

我会使用一个结构来描述底层协议,然后继续。例子:

struct dx{
  uint8 _junk0[9];
  char  name1[2];
  char  name2[2];
  uint32 num;
} __attribute__((packed));

uint8 *input;
dx* struct=(dx*)input;
printf("%d",dx->num);
于 2015-08-28T08:06:16.427 回答