操作对提升asnyn_read的影响

Effect of operations on boost asio asnyn_read

本文关键字:read 影响 asnyn 作对 操作      更新时间:2023-10-16

我有以下代码段从设备读取数据:

    void handle_read(const boost::system::error_code& ec, std::size_t n) {
        std::cout << "handle_read: " << ec << " " << n << "n";
        if (!ec) {
            std::istream stream(&buf);    
            while(!stream.eof()) {        
                char c[4096];
                stream.read(c, 4096);     //....(1)
                std::cout << "stream size: " << stream.gcount() << "n";
                std::cout << std::hex << (0xFF & (unsigned char) c[0]) << " " <<     //....(2)
                     (0xFF & (unsigned char) c[1]) << " " << 
                     (0xFF & (unsigned char) c[2]) << " " << 
                     (0xFF & (unsigned char) c[3]) << "n";
            }
            //Continue reading remaining data until EOF.
            boost::asio::async_read(*tcp_socket, buf,
                boost::asio::transfer_at_least(1),
                boost::bind(&Connection::handle_read, this,
                boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
    }

如果没有(1)(2),每个周期读取的字节数约为1440。随着我不断添加步骤,n分别减少到 512 和 200。

istream.read()std::coutasync_read读取的字节数有什么影响?有什么办法可以避免这种情况吗?

by

std::cout << std::hex

您已更改数字的基数。

因此,只有在第一次处理程序调用时,您才会以十进制 - 1440 打印读取字节数。在处理程序的第二次和下一次调用中,您将打印hex基数中的读取字节值。您需要通过dec操纵器将其显式地转回十进制。 所以512十六进制是十进制1298。我认为这个值接近 1440。