char data_[4096];
...
socket_.async_read_some(boost::asio::buffer(data_, 4096),
boost::bind(&client::handle_read_header, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
Run Code Online (Sandbox Code Playgroud)
handle_read_header触发函数时,在文本中data_包含许多\0符号.借助于哪种方式可以更轻松地查看完整(带有剥离或转义\0)字符串std::cout?(默认情况下\ 0使字符串结束,不显示其他字符串)
Seth善意地指出了你要求"更容易查看"的要求.为了那个原因:
for (size_t i = 0; i < num_bytes; ++i)
if (buffer[i] == '\\')
std::cout << "\\\\";
else if (isprint(buffer[i]))
std::cout << buffer[i];
else
std::cout << '\\' << std::fill(0) << std::setw(3) << buffer[i];
Run Code Online (Sandbox Code Playgroud)
以上使用3位反斜杠转义八进制表示法来表示不可打印的字符.您可以轻松地更改表示.
(对于一个简单的二进制写,你可以调用std::cout.write(buffer, num_bytes)二进制块写,而不是std::cout << buffer依赖于字符数组/指针的ASCIIZ约定.然后你可以将结果输入到less,cat -vt或者你的操作系统提供的任何有助于查看二进制数据的内容,包括完全无效.)
| 归档时间: |
|
| 查看次数: |
525 次 |
| 最近记录: |