В моем коде есть функция с именем buildPacket
, которая принимает некоторые параметры, преобразует их в char*
, добавляет их вместе, используя std::vector<char>
, и в конце возвращает результат как char*
.Проблема в том, что после того, как я преобразовал вектор в char*
, все символы стали странными.
Я попытался использовать другие способы преобразования вектора в char*
, например, используя reinterpret_cast<char*>
.Когда я печатаю содержимое вектора изнутри функции, я получаю ожидаемый результат, поэтому проблема в преобразовании.
Код функции:
char* buildPacket (int code, std::string data)
{
char* codeBytes = CAST_TO_BYTES(code);
std::vector<char> packetBytes(codeBytes, codeBytes + sizeof(char));
size_t dataLength = data.size() + 1;
char* dataLengthBytes = CAST_TO_BYTES(dataLength);
packetBytes.insert(packetBytes.end(), dataLengthBytes, dataLengthBytes + sizeof(int));
const char* dataBytes = data.c_str();
packetBytes.insert(packetBytes.end(), dataBytes, dataBytes + dataLength);
return &packetBytes[0];
}
Макрос CAST_TO_BYTES
:
#define CAST_TO_BYTES(OBJ) static_cast<char*>(static_cast<void*>(&OBJ));
Цель функции - взять входные данные и создать из них пакет для последующей отправки через сокет. Формат пакета состоит из 1-байтового длинного кода и 4-байтового кода.длинная длина данных и данные с переменной длиной.
Введенные мной данные code = 101
и data = "{\"password\":\"123456\",\"username\":\"test\"}"
Это результат, который я получаю при печати символов: ▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
РЕДАКТИРОВАТЬ: Спасибо за всю помощь, я возвратил vector<char>
в конце, как предложено, и использовал другой подход при преобразовании значений в char*
.