Сомневаюсь, что вам нужен этот ответ год спустя, но для широкой публики:
В вашем коде буфер передается по ссылке.Это так, что когда asio асинхронно вызывает ваш обработчик чтения (Client::handleRead
), он обновляет содержимое этого буфера до того, что получит.
Буфер - это просто массив с указанным размером.Asio не будет заполнять буфер после размера, указанного вами в boost::asio::buffer(ptr, size)
, поэтому, если вам нужно 32-разрядное целое число, передайте ему указатель на начало массива с размером = 4 байта, а затем приведите его к 32-бит int (вероятно, uint32_t
из stdint.h
), когда он вызывает обработчик чтения.
Обычно вы можете сохранить хороший кусок памяти, передавая 16 или 8 бит, когда вам не нужен весь32-битное целое число.uint8_t
и uint16_t
позволят вам сделать это, не беспокоясь о том, не является ли int
вашей архитектуры 32-битным.