python - 通过套接字以原始表示形式写入连续的 numpy 数组
问题描述
我需要将大型固定大小的缓冲区从 python 发送到 c/c++ 代码端。从 python 方面,我有以下形式的缓冲区:
array = np.zeros([1000], dtype=np.uint8)
array = fill(array)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 1010))
下面的代码用于从 C/C++ 端接收来自已连接套接字的数据。从 C/C++ 端我需要将此缓冲区作为原始 1000 字节数组,我不需要任何标题,我只需要数据。不幸的是,我还没有找到如何去做。一般来说np.tofile()
- 制作我需要的东西,但在文件中。
int recvBuffer(uint8_t *p_buff, uint32_t size, int socket)
{
uint32_t recived = 0;
uint8_t *p_curr = p_buff;
while (recived < size)
{
int ret = recv(tcp_sock, p_curr, size - recived, 0);
if (ret != -1)
{
p_curr += ret;
recived += ret;
}
else
{
return false;
}
}
return true;
}
解决方案
我找到了解决方案。我在 np.tofile 描述中找到了它。
np_array = np.zeros([1000], dtype=np.uint8)
np_array = fill(np_array)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 1010))
raw_buffer = np_array.to_bytes()
s.send(raw_buffer)
完全符合我的要求。raw_buffer
- 将 np.array 缓冲区保存为原始 c-stype 缓冲区。
推荐阅读
- mysql - 共享锁查询真的有可能返回不正确的结果吗?
- yaml - 使用 yq 修改 YAML 以在元数据的每个条目下包含标签
- python - 如何避免在 scipy 稀疏矩阵中插入不必要的零
- c# - 无法从程序集“Microsoft...AppAuthentication”加载类型“Microsoft...SqlAppAuthenticationProvider”
- sed - sed 或 awk:删除/注释 3 行之前的模式后面的 n 行
- javascript - Html table td:更改边框宽度时如何将宽度保持为0?
- c# - 在 Entity Framework Core 方法表达式的 Select() 中调用方法
- git - 仅当从 GitHub 中的特定分支发出拉取请求时,如何触发 Jenkins 管道?
- c++ - 我如何告诉编译器有一些未定义但会定义的结构?
- tensorflow - 预测一张图片在另一张图片中的位置