我认为write()
只能发送byte的数据缓冲区(即signed char),那么如何使用write()
sys/socket.h库中的C 函数发送长整数数组呢?
显然,我不能只是强制转换或转换为char,因为任何超过127的数字都会格式不正确.
我看了一下这个问题,如何将整数数组分解为一个字节数组(像素编码),但无法理解它 - 如果这是我正在寻找的东西,请有人愚蠢一点吗?
当从TCP套接字读取整数数组时,为什么会出现奇怪的结果?
写的原型是:
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
它.在这种情况下,count将等于:sizeof(int) * element_count
编辑:
正如Brian Mitchell所指出的那样,您可能也需要注意端点问题.发送任何多字节值时都是这种情况(如我推荐的计数以及数组的每个元素).这是通过:htons
/ htonl
和ntohs
/ ntohl
函数完成的.
写可以做你想要的,但有一些事情需要注意:
1:您可能会得到一个不在int边界的部分写入,因此您必须准备好处理这种情况
2:如果代码需要是可移植的,您应该将数组转换为特定的字节序,或者在消息中编码字节序.