如何用 uint8_t* 创建一个 boost::asio::buffer [这可能吗?]
How to create a boost::asio::buffer with uint8_t* [Is it possible?]
这个问题是关于boost::asio::buffer
我有一个通过 TCP 套接字发送数据的调用。以下是调用:
std::vector<unsigned char> data = GetDataToSend();
boost::asio::async_write(tcp_socket, boost::asio::buffer(data),
[this](const boost::system::error_code & error, std::size_t bytes_sent) {
if (!error && bytes_sent > 0) {
// Success!
}
});
只要GetDataToSend
returns一个std::vector<unsigned char>
以上就很好了。
但是,如果GetDataToSend
返回一个uint8_t*
怎么办?难道不能把uint8_t*
的数据放到boost::asio::buffer
然后做一个async_write
吗?如下所示..
uint8_t* data = GetDataToSend();
boost::asio::async_write(tcp_socket, boost::asio::buffer(data),
[this](const boost::system::error_code & error, std::size_t bytes_sent) {
if (!error && bytes_sent > 0) {
// Success!
}
});
是不是boost::asio::buffer
只对std::vector<unsigned char>
进行操作?
如何从 uint8_t*
创建一个 boost::asio::buffer
对象?如果我能做到这一点而不会造成额外的副本,那就太好了。
我正在使用 boost 1.63。
在page上,所有缓冲区重载,其中之一是
const_buffer buffer(
const void * data,
std::size_t size_in_bytes);
您可以使用它,但您需要定义缓冲区的大小。没有这个,async_write
怎么知道必须传输多少字节?在 vector
的情况下,buffer
通过调用 vector::size
方法知道这个大小。如果是原始缓冲区,您必须明确提供。
如果GetDataToSend
返回对:指向数据的指针及其长度,你可以写:
std::pair<uint8_t*,size_t> GetDataToSend() {
// ...
return result;
}
std::pair<uint8_t*,int> data = GetDataToSend();
boost::asio::async_write(tcp_socket, boost::asio::buffer(data.first, data.second), ...
这个问题是关于boost::asio::buffer
我有一个通过 TCP 套接字发送数据的调用。以下是调用:
std::vector<unsigned char> data = GetDataToSend();
boost::asio::async_write(tcp_socket, boost::asio::buffer(data),
[this](const boost::system::error_code & error, std::size_t bytes_sent) {
if (!error && bytes_sent > 0) {
// Success!
}
});
只要GetDataToSend
returns一个std::vector<unsigned char>
以上就很好了。
但是,如果GetDataToSend
返回一个uint8_t*
怎么办?难道不能把uint8_t*
的数据放到boost::asio::buffer
然后做一个async_write
吗?如下所示..
uint8_t* data = GetDataToSend();
boost::asio::async_write(tcp_socket, boost::asio::buffer(data),
[this](const boost::system::error_code & error, std::size_t bytes_sent) {
if (!error && bytes_sent > 0) {
// Success!
}
});
是不是boost::asio::buffer
只对std::vector<unsigned char>
进行操作?
如何从 uint8_t*
创建一个 boost::asio::buffer
对象?如果我能做到这一点而不会造成额外的副本,那就太好了。
我正在使用 boost 1.63。
在page上,所有缓冲区重载,其中之一是
const_buffer buffer(
const void * data,
std::size_t size_in_bytes);
您可以使用它,但您需要定义缓冲区的大小。没有这个,async_write
怎么知道必须传输多少字节?在 vector
的情况下,buffer
通过调用 vector::size
方法知道这个大小。如果是原始缓冲区,您必须明确提供。
如果GetDataToSend
返回对:指向数据的指针及其长度,你可以写:
std::pair<uint8_t*,size_t> GetDataToSend() {
// ...
return result;
}
std::pair<uint8_t*,int> data = GetDataToSend();
boost::asio::async_write(tcp_socket, boost::asio::buffer(data.first, data.second), ...