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)
这将发送正确数量的字节。
我正在使用 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)
这将发送正确数量的字节。