我在解决如何将uint8向量转换为stringstream方面遇到了一些麻烦。
在输入im获取uint8的向量时,前9个字节是我在字符串流中不需要的标志,接下来的2个字节是我需要的一些数据作为字符串,让我们称之为" name1&#34 ;,接下来的2个字节是另一个名字,以免称之为" name2",然后是4个字节,这是一些uint32号码(但写为4 uint8字节),让我们只调用它#34;数字&#34 ;。现在我需要将这些数据传递给stringstream但是:
所以如果我得到像这样的矢量:
---大约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
我可以使用"<<"运营商还是不推荐?
答案 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);