Я использую WinAPI для одного из первых случаев, и у меня есть функция, которая возвращает UCHAR *, но мне она нужна как строка std: потому что, когда я пытаюсь напечатать ее как UCHAR *, но когда я это сделал, она печатает много тарабарщины. Должен быть простой способ исправить эту проблему. Я разобрался в этом, но ничего не нашел. Я даже не знаю, что такое UCHAR *, хотя он, похоже, действует как какая-то строка. Я слышал, что это указатель на строку без знака, но я не совсем уверен, что это значит.
Поскольку члены этой структуры не имеют нулевой конец:
std::string chemistry(battery_info.Chemistry, battery_info.Chemistry + 4);
Вы получите поведение, которое хотите, без необходимости делать memcpy
;
Это должно работать
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.
battery_info.Chemistry + strnlen(battery_info.Chemistry, 4)
возможно.