我相信 write()
只能发送字节数据缓冲区(即 signed char),那么如何使用 C write 发送长整数数组()
sys/socket.h 库中的函数?
显然,我不能只将 long 转换或转换为 char,因为任何超过 127 的数字都会出现格式错误。
我看了一下问题,how to decompose integer array to a byte array (pixel codings) ,但无法理解 - 如果这就是我要找的东西,请有人能把它简化一点吗?
跟进问题:
Why do I get weird results when reading an array of integers from a TCP socket?
最佳答案
write 的原型(prototype)是:
ssize_t write(int fd, const void *buf, size_t count);
所以当它以字节为单位写入时,它可以接受任何类型的指针。传递 int*
完全没有问题。
编辑:
不过,我建议您也发送您计划首先发送的整数数量,以便接收者知道要读取多少。像这样的东西(为简洁起见省略了错误检查):
int x[10] = { ... };
int count = 10;
write(sock, &count, sizeof(count));
write(sock, x, sizeof(x));
注意:如果数组来自动态内存(就像您 malloc
编辑它一样),您不能对其使用 sizeof
。在这种情况下,计数将等于:sizeof(int) * element_count
编辑:
作为Brian Mitchell注意,您可能需要注意 endian问题也是如此。发送任何多字节值时就是这种情况(如我推荐的计数以及数组的每个元素)。这是通过以下函数完成的:htons
/htonl
和 ntohs
/ntohl
函数。
关于c - 如何在 C 中通过 TCP 发送整数数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/672241/