我认为write()只能发送byte的数据缓冲区(即signed char),那么如何使用write()sys/socket.h库中的C 函数发送长整数数组呢?
显然,我不能只是强制转换或转换为char,因为任何超过127的数字都会格式不正确.
我看了一下这个问题,如何将整数数组分解为一个字节数组(像素编码),但无法理解它 - 如果这是我正在寻找的东西,请有人愚蠢一点吗?
Eva*_*ran 16
写的原型是:
ssize_t write(int fd, const void *buf, size_t count);
Run Code Online (Sandbox Code Playgroud)
因此,当它以字节为单位写入时,它可以采用任何类型的指针.通过一个int*将是没有问题的.
编辑:
但是,我会建议您先发送计划发送的整数,以便收件人知道要阅读多少.像这样的东西(为简洁省略了错误检查):
int x[10] = { ... };
int count = 10;
write(sock, &count, sizeof(count));
write(sock, x, sizeof(x));
Run Code Online (Sandbox Code Playgroud)
注意:如果阵列来自动态内存(就像您malloc编辑的那样),则无法使用sizeof它.在这种情况下,count将等于:sizeof(int) * element_count
编辑:
正如Brian Mitchell所指出的那样,您可能也需要注意端点问题.发送任何多字节值时都是这种情况(如我推荐的计数以及数组的每个元素).这是通过:htons/ htonl和ntohs/ ntohl函数完成的.
写可以做你想要的,但有一些事情需要注意:
1:您可能会得到一个不在int边界的部分写入,因此您必须准备好处理这种情况
2:如果代码需要是可移植的,您应该将数组转换为特定的字节序,或者在消息中编码字节序.
| 归档时间: |
|
| 查看次数: |
29816 次 |
| 最近记录: |