приведение элементов вектора uint8 в поток строк

У меня возникли проблемы с выяснением того, как преобразовать мой вектор uint8 в stringstream.

На входе я получаю вектор от uint8, первые 9 байтов — это флаги, которые мне не нужны в моем потоке строки, следующие 2 байта — это данные, которые мне нужны как строка, давайте назовем их «name1», следующие 2 байта — это другое имя, чтобы не вызывать его «name2», затем идет 4 байта, которые являются некоторым числом uint32 (но записанным как 4 байта uint8), давайте назовем его просто «число». Теперь мне нужно передать эти данные в stringstream, но:

  • name1 и number2 должны быть записаны в байтах (байт 0x52 -> char [2] = {«5», «2»})
  • номер должен быть приведен к uint32
  • все переменные должны быть разделены точками с запятой в окончательном потоке строки

так что если я получаю вектор как этот:

—около 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, используя «<<оператор или это не рекомендуется?

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;

совершенно бесполезно, вам не нужен указатель.

0

Другие решения

Я не уверен, что это решит вашу проблему, но я бы выбрал другой подход.

Я хотел бы использовать структуру для описания базового протокола, а затем продолжить с этим. пример:

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

По вопросам рекламы [email protected]