wstring 到 wchar_t 的转换

wstring to wchar_t conversion

我正在使用 Namedpipes 通信 (C++) 在两个进程之间传输数据。为了方便起见,我使用 wstring 传输数据,在传输端一切正常。我无法在接收端接收到全部数据。 以下是传输结束代码。

wstringstream send_data;        
send_data << "10" << " " << "20" << " " << "30" << " " << "40" << " " << "50" << " " << "60" << "[=11=]" ;
DWORD numBytesWritten = 0;
result = WriteFile(
    pipe, // handle to our outbound pipe
    send_data.str().c_str(), // data to send
    send_data.str().size(), // length of data to send (bytes)
    &numBytesWritten, // will store actual amount of data sent
    NULL // not using overlapped IO
);

以下为接收端代码

wchar_t buffer[128];
DWORD numBytesRead = 0;
BOOL result = ReadFile(
    pipe,
    buffer, // the data from the pipe will be put here
    127 * sizeof(wchar_t), // number of bytes allocated
    &numBytesRead, // this will store number of bytes actually read
    NULL // not using overlapped IO
);

if (result) {
    buffer[numBytesRead / sizeof(wchar_t)] = '[=12=]'; // null terminate the string
    wcout << "Number of bytes read: " << numBytesRead << endl;
    wcout << "Message: " << buffer << endl;

}

buffer中的结果只包含10 20 30 有人能解释一下为什么数据被截断了吗?

您没有使用 WriteFile() 函数发送所有数据。您正在发送 send_data.str().size() 个不正确的字节数,因为 size() 给您的是字符数而不是字节数。您可以更改代码以使用:

send_data.str().size() * sizeof(wchar_t) / sizeof(char)

这将发送正确数量的字节。