У меня возникли проблемы с выяснением того, как преобразовать мой вектор uint8 в stringstream.
На входе я получаю вектор от uint8, первые 9 байтов — это флаги, которые мне не нужны в моем потоке строки, следующие 2 байта — это данные, которые мне нужны как строка, давайте назовем их «name1», следующие 2 байта — это другое имя, чтобы не вызывать его «name2», затем идет 4 байта, которые являются некоторым числом uint32 (но записанным как 4 байта uint8), давайте назовем его просто «число». Теперь мне нужно передать эти данные в stringstream, но:
так что если я получаю вектор как этот:
—около 9 байт —, 0x05, 0x00, 0x01,0x00,0x00,0x00,0x08,0x0E, — некоторые другие данные —
мне нужен струнный поток, чтобы быть таким:
«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, используя «<<оператор или это не рекомендуется?
если у вас есть строка, просто зациклите строку и выведите символы в ваш поток строк
std::string name = "name1";
std::stringstream ss;
for(auto c : name)
ss << std::static_cast<int>(c);
ss << ";";
Как примечание стороны:
uint32_t* var = (uint32_t*)tab;
совершенно бесполезно, вам не нужен указатель.
Я не уверен, что это решит вашу проблему, но я бы выбрал другой подход.
Я хотел бы использовать структуру для описания базового протокола, а затем продолжить с этим. пример:
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);