将uint8向量的元素转换为stringstream

时间:2015-08-28 07:53:01

标签: c++ vector stringstream uint8t

我在解决如何将uint8向量转换为stringstream方面遇到了一些麻烦。

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

  • name1和number2需要写为字节(字节0x52 - > char [2] = {" 5"," 2"})
  • 号码需要转换为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

我可以使用"<<"运营商还是不推荐?

2 个答案:

答案 0 :(得分: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;

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

答案 1 :(得分:-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);