我正在使用c ++中的套接字编写网络应用程序,所以我们直接跳到问题: 我将我的数据存储为int16_ts数组(int16_t的选择是为了保持不同平台的一致性),因为我们知道这些int16_ts中的每一个都是内存中的两个连续字节。我想将每个字节存储在一个char中,以便每个int16将被转换为两个字节,并最终通过套接字发送整个char *
请注意我没有找到像std :: to_string之类的东西,因为我希望每个int16_t只占用两个字节。
任何帮助表示赞赏!
答案 0 :(得分:0)
您需要一次将每个int16_t
复制到char *
缓冲区,在每个缓冲区上调用htons()
以将字节转换为网络字节顺序。然后在接收方,您可以致电ntohs()
转换回来。
int send_array(int16_t *myarray, int len, int socket) {
char buf[1000];
int16_t *p;
int i;
p = (int16_t *)buf;
for (i=0;i<len;i++) {
p[i] = htons(myarray[i]);
}
return send(socket,buf,len*sizeof(int16_t),0);
}
答案 1 :(得分:0)
C ++有一个新类型char16_t
,它设计用于保存UTF-16字符。如果您的意思是希望一次一个字节地通过线路发送16位提示,请使用htons()
将每个提示转换为网络字节顺序,将它们存储在uint16_t
的新数组中,然后发送套接字上的那个数组。如果要将short数组作为字节数组来处理,可以通过union,指针转换或引用数组来实现。示例:char* const p=reinterpret_cast<char*>(&shorts[0]);
。