0 / 0 / 0
Регистрация: 15.12.2020
Сообщений: 3
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Как правильно преобразовать строку std::string (массив байт) в std::char*01.02.2021, 12:13. Показов 841. Ответов 1
Я использую библиотеку CryptoPP для AES и RSA шифрования. И у меня возникает проблема при преобразовании std::string в const std::char*. На сколько я понимаю (по скриншотам ниже), проблема заключается в том, что функция .c_str() обрезает строку в месте где встречается \0.
Это функция шифрования:
https://github.com/Shue-moe/he... /O4ME6.png Я задавал этот вопрос на StackOverflow, там мне объяснили что .c_str() не обрезает строку, и я понимаю что это так, однако, когда я вывел зашифрованную строку, а после приравнял к другой строке значение <зашифрованная строка>.c_str() я получаю обрезанную строку. И я говорю об этом с уверенность не потому что когда вывожу она меньше изначальной, нет. Потому что когда я сравниваю размер исходной и той что мне отдала .c_str(), (функцией .length()) их размер часто разный. Опять таки, от везений, встретится ли \0 или нет.
И вот у меня назревает вопрос, как мне перевести строку в const std::char*, что бы при этом она не останавливалась на символе \0? Я могу использовать кастыль: шифровать строку, и после проверять, есть ли в ней символ \0 в середине строки. Если есть, шифровать ещё раз, и проверять. И только при нормальном исходе отдавать в Python. Но так кастылять я не хочу. Прошу подскажите кто знает P.S. Я сравнивал длину строки cipher_text и cipher_text_test -- у них часто разный размер P.S.S. Мне это нужно для того что бы я мог передать в Python зашифрованную строку (то есть возможны только 2 типа хранения: std::char* и std::wchar_t*). P.S.S.S. Когда я передаю зашифрованную строку в функцию дешифрования, всё работает отлично. Если я преобразовываю строку в строку, со значением которое отдаёт функция .c_str(), то вероятность того, что функция дешифрования не уйдёт в ошибку, 1 к 9. (всм если изначальная шифрованная строка не имела \0, то преобразование пройдёт отлично и функция дешифрует строку).
0
|
01.02.2021, 12:13 | |
Ответы с готовыми решениями:
1
ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri Как правильно сделать std::string блоками по 16 байт? ошибка в программе (cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*') Как правильно перевести std::wstring в std::string ? |
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
01.02.2021, 12:51 | 2 |
Нет, не обрезает. Просто std::cout выводит до нуля. Проверь cipher_text.size()
Добавлено через 3 минуты А там разве должны быть нули в середине? Добавлено через 8 минут Может тебе там ещё нужно CryptoPP::HexEncoder/CryptoPP::HexDecoder использовать?
0
|
01.02.2021, 12:51 | |
01.02.2021, 12:51 | |
Помогаю со студенческими работами здесь
2
std::getline Альтернатива для (std::string, int, char) (std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& Странная ошибка: [Error] no match for call to '(std::string {aka std::basic_string<char>}) (int&)' Преобразовать const unsigned char* в std::string (или _bstr_t ) Error C2664: std::vector<_Ty>::push: невозможно преобразовать параметр 1 из 'double' в 'const std::string &' Где и почему используют ту или иную строку std::string, char[], System::String^ ? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |