我的代码中有一个函数,该函数buildPacket需要一些参数,然后将它们转换为a char*,并使用a将它们加在一起std::vector<char>,最后将结果返回为a char*。问题是我将向量转换为a后,char*所有字符都变成了怪异字符。
我尝试使用其他方法将向量转换为a 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];
}
Run Code Online (Sandbox Code Playgroud)
该CAST_TO_BYTES宏:
#define CAST_TO_BYTES(OBJ) static_cast<char*>(static_cast<void*>(&OBJ));
Run Code Online (Sandbox Code Playgroud)
该功能的目的是获取输入并从中构建数据包,以便稍后通过套接字发送,该数据包的格式包括1个字节长的代码,4个字节长的数据长度和可变长度的数据。
输入我给它code = 101和data = "{\"password\":\"123456\",\"username\":\"test\"}"
这是打印字符时得到的结果: ????????????????????????????????????????????????
编辑:感谢您的所有帮助,我已vector<char>按照建议在结尾处返回了a ,并采取了另一种方法将值转换为char*。