УЧАР * в std :: string

0

Я использую WinAPI для одного из первых случаев, и у меня есть функция, которая возвращает UCHAR *, но мне она нужна как строка std: потому что, когда я пытаюсь напечатать ее как UCHAR *, но когда я это сделал, она печатает много тарабарщины. Должен быть простой способ исправить эту проблему. Я разобрался в этом, но ничего не нашел. Я даже не знаю, что такое UCHAR *, хотя он, похоже, действует как какая-то строка. Я слышал, что это указатель на строку без знака, но я не совсем уверен, что это значит.

Теги:
winapi

2 ответа

1
Лучший ответ

Поскольку члены этой структуры не имеют нулевой конец:

std::string chemistry(battery_info.Chemistry, battery_info.Chemistry + 4);

Вы получите поведение, которое хотите, без необходимости делать memcpy;

  • 0
    За исключением того, что если он завершен нулем, он добавит нуль в вашу строку, что вы, вероятно, не хотите. Документы говорят, что это не может быть завершено нулем.
  • 0
    battery_info.Chemistry + strnlen(battery_info.Chemistry, 4) возможно.
Показать ещё 4 комментария
4

Это должно работать

char temp[5];
memcpy(temp, battery_info.Chemistry, 4);
temp[4] = '\0'; // add nul terminator
std::string s = temp; // convert to string

Поскольку исходные данные не обязательно имеют обычный nul-терминатор, я скопировал данные во временный массив символов, добавил nul terminator, чтобы убедиться, а затем преобразован в std :: string.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню