c++ - 直接从 RAM 发送原始数据

标签 c++ sockets boost asio

在 SoC 解决方案中,fpga 直接在 RAM 中保存大量整数值。 另一端的处理器可以看到此数据(整数),处理器应通过网络发送此数据,而无需使用 asio 库对其进行修改。 到目前为止,这个数据还不是太大,我将它复制到一个 vector 中,然后毫无问题地通过以太网发送它(请参阅代码)。 在当前的项目中,数据量已经增加(大约 200MB),我想直接从 ram 发送它,而不用之前将其复制为 vector 。当然我会把它分成几部分。 有没有办法直接从 void (void *ptr) 类型的 RAM 指针发送原始数据,或者有更好的方法来做到这一点?

提前致谢

std::vector<int> int_vect;
for( uint32_t i=from_index ; i<=to_index ; i++ )
{   
     int_vect.push_back(my_memory_ptr->get_value_axis(....));
}
asio::write(z_sock_ptr->socket_, asio::buffer(int_vect));

最佳答案

是的。 asio::buffer 的重载之一提供了 exactly this functionality:

mutable_buffer buffer(
    void * data,
    std::size_t size_in_bytes);
  » more...

如果数据是连续的,我们可以这样使用它:

void* data = /* get data */; 
size_t size = /* get size */; 
asio::write(z_sock_ptr->socket_, asio::buffer(data, size)); 

关于c++ - 直接从 RAM 发送原始数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57207742/

相关文章:

c++ - 是否有任何不关注 Java 的优秀并发/并行书籍?

c++ - 欧拉计划 #31 蛮力

c++ - 使用 boost 库收听 udp 广播

c++ - boost asio 服务队列深度和策略

c++ - Dijkstra 算法 C++

c++ - (Qt C++) 如何从 QTableView 将选定的文件/文件夹打印到文本文件中

c# - .NET/Windows Server 中的最大传出套接字连接数

c# - 如何检测断开连接的套接字 C#?

c++ - SO_RCVTIME和SO_RCVTIMEO不影响Boost.Asio操作

c++ - boost::asio::io_context::run_one_for() 无法发送大缓冲区