Функции C++ для преобразования последовательности байтов в строковое представление приводят к мусорному выводуC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Функции C++ для преобразования последовательности байтов в строковое представление приводят к мусорному выводу

Сообщение Anonymous »

Я написал несколько простых функций C++ для преобразования последовательностей байтов в строковые представления.
Это было довольно просто, я уверен, что моя логика верна, я думал, что это очень просто, пока я не начал печатать строки и не обнаружил, что результат — мусор:

Код: Выделить всё

#include 
#include 
#include 

using std::vector;
typedef vector bytes;
using std::string;
using std::cout;
using namespace std::literals;

string DIGITS = "0123456789abcdef"s;

static inline string hexlify(bytes arr) {
string repr = ""s;
for (auto& chr : arr) {
repr += " " + DIGITS[(chr & 240) >> 4] + DIGITS[chr & 15];
}
repr.erase(0, 1);
return repr;
}

bytes text = {
84, 111, 32, 98, 101, 32,
111, 114, 32, 110, 111, 116,
32, 116, 111, 32, 98, 101
}; // To be or not to be

int main() {
cout > 4] + digits[i & 15]
return s[1:]
И это работает:

Код: Выделить всё

>>> bytes_string(b"To be or not to be")
'54 6f 20 62 65 20 6f 72 20 6e 6f 74 20 74 6f 20 62 65'
Но почему это не работает в C++?
Я использую Visual Studio 2022 V17.9.7, флаги компилятора:

Код: Выделить всё

/permissive- /ifcOutput "hexlify_test\x64\Release\" /GS /GL /W3 /Gy /Zc:wchar_t /Zi /Gm- /O2 /sdl /Fd"hexlify_test\x64\Release\vc143.pdb" /Zc:inline /fp:precise /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /std:c17 /Gd /Oi /MD /std:c++20 /FC /Fa"hexlify_test\x64\Release\" /EHsc /nologo /Fo"hexlify_test\x64\Release\" /Ot /Fp"hexlify_test\x64\Release\hexlify_test.pch" /diagnostics:column
Я только что узнал, что мусорный вывод происходит только в режиме отладки после реализации исправления, я нацелился на C++20 в режиме отладки, каким-то образом код вызывает мусорный вывод в режиме отладки, переключение в режим выпуска устраняет проблему. До того, как исправление было реализовано, я скомпилировал в режиме выпуска, и возникла эта проблема.

Подробнее здесь: https://stackoverflow.com/questions/785 ... sults-in-g
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»