C++ 将uint8矢量的元素强制转换为stringstream

C++ 将uint8矢量的元素强制转换为stringstream,c++,vector,stringstream,uint8t,C++,Vector,Stringstream,Uint8t,我在弄清楚如何将uint8向量转换为stringstream时遇到了一些麻烦 输入时,我得到uint8的向量,前9个字节是我在字符串流中不需要的标志,接下来的2个字节是我需要作为字符串的一些数据,让我们称它们为“name1”,接下来的2个字节是另一个名称,以免称它为“name2”,然后是一些uint32数字的4个字节(但写为4个uint8字节),让我们只称它为“number”。现在我需要将这些数据传递给stringstream,但是: name1和number2需要以字节的形式写入(字节0x5

我在弄清楚如何将uint8向量转换为stringstream时遇到了一些麻烦

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

  • name1和number2需要以字节的形式写入(字节0x52->char[2]={“5”,“2”})
  • 需要将编号转换为uint32
  • 所有变量都需要在最后的字符串流中用分号分隔
如果我得到一个像这样的向量:

---大约9个字节--,0x05,0x00,0x01,0x00,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


我可以使用“将字符串放入stringstream吗?我不确定这是否能解决您的问题,但我会采取不同的方法

我将使用结构描述底层协议,然后继续。示例:

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);

如果您有一个字符串,只需在该字符串上循环并将字符输出到stringstream

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

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

这就是
C
C++
的方法是重写操作符
,一个更大的问题是这违反了严格的别名。@Voo:谢谢你注意,我已经读过了,是的,它就是这样;)好的,我明白你的意思,但我需要用uint8字符填充字符串om数据向量,如何用这些字符填充字符串,以便数据向量中的0x05和0x00在字符串中看起来像这样:“0500”“我只需要这两个字节。那么我要问一下你的问题不是很清楚。请澄清,不要像用英语那样用短信。如果你需要填充字符串,你可以总是
将你的字符附加到你需要的字符串中。添加了一个带有claryfication的编辑,希望它能把我的问题弄清楚。
uint32_t* var = (uint32_t*)tab;