gpt4 book ai didi

c - 如何在 C 中通过 TCP 发送整数数组?

转载 作者:可可西里 更新时间:2023-11-01 02:34:51 25 4
gpt4 key购买 nike

我相信 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/htonlntohs/ntohl 函数。

关于c - 如何在 C 中通过 TCP 发送整数数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/672241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com