преобразовать массив uint8_t в строку - PullRequest
1 голос
/ 20 марта 2019

В проекте у меня есть структура, в которой есть один член типа unsigned int array (uint8_t), как показано ниже

typedef uint8_t  U8;
typedef struct {
    /* other members */
    U8 Data[8];
} Frame;

указатель на переменную типа Frame, полученный во время отладкиЯ вижу это, как показано ниже, в консоли VS2017

/* the function signatur */
void converter(Frame* frm){...}

frm->Data   0x20f1feb0 "6þx}\x1òà...   unsigned char[8] // in debug console

, теперь я хочу присвоить его 8-битной строке

Я сделал это, как показано ниже, но он объединяет числовые значения массива ив результате получается что-то вроде "541951901201251242224"

std::string temp;
for (unsigned char i : frm->Data)
{
    temp += std::to_string(i);
}

, также пытался const std::string temp(reinterpret_cast<char*>(frm->Data, 8));, который выдает исключение

Ответы [ 2 ]

1 голос
/ 20 марта 2019

В исходном приведении const std::string temp(reinterpret_cast<char*>(frm->Data, 8)); вы поставили закрывающую скобку не в том месте, чтобы она в итоге выполнила reinterpret_cast<char*>(8), и это является причиной сбоя.

Fix:

std::string temp(reinterpret_cast<char const*>(frm->Data), sizeof frm->Data);
0 голосов
/ 20 марта 2019

Просто оставьте std::to_string. Он преобразует числовые значения в их строковое представление. Так что даже если вы дадите ему char, он просто преобразует его в целое число и вместо этого преобразует его в числовое представление этого целого числа. С другой стороны, просто добавление char к std::string с использованием += работает нормально. Попробуйте это:

int main() {
    typedef uint8_t  U8;
    U8 Data[] = { 0x48, 0x65, 0x6C, 0x6C, 0x6F };
        std::string temp;
        for (unsigned char i : Data)
        {
            temp += i;
        }
        std::cout << temp << std::endl;
}

См. здесь для получения дополнительной информации и примеров оператора std::string +=.

...