我必须通过udp套接字发送一个int数组。我必须将其转换为字符数组或字节序列吗?什么是标准解决方案?
答案 0 :(得分:2)
你可以这样做:
int array[100] ;
sendto(sockfd, array, sizeof(array), 0, &addr, addrlen);
要在另一边收回你的数组(假设你总是发送相同大小的数组):
int array[100] ;
recvfrom(sockfd, array, sizeof(array), 0, &addr, &addrlen);
如评论中所述,您必须小心发送/接收数据包的系统架构。如果您正在为“标准”计算机开发应用程序,如果您想确定,则不应该有任何问题:
stdint.h
并使用int32_t
或您需要的任何内容。Endianess转换:
// SENDER
int32_t array[100] = ... ;
int32_t arrayToSend[100] ;
for (int i = 0 ; i < 100 ; ++i) {
arrayToSend[i] = htonl(array[i]) ;
}
sendto(sockfd, arrayToSend, sizeof(arrayToSend), 0, &addr, addrlen);
// RECEIVER
int32_t array[100] ;
int32_t arrayReceived[100] ;
recvfrom(sockfd, arrayReceived, sizeof(arrayReceived), 0, &addr, &addrlen);
for (int i = 0 ; i < 100 ; ++i) {
array[i] = ntohl(arrayReceived[i]) ;
}
答案 1 :(得分:0)
你不必转换它。
例如,你可以这样做:
int array[42];
write(sock, array, sizeof(array));