访问int16_t作为char *

时间:2015-10-11 20:33:16

标签: c++ sockets

我正在使用c ++中的套接字编写网络应用程序,所以我们直接跳到问题: 我将我的数据存储为int16_ts数组(int16_t的选择是为了保持不同平台的一致性),因为我们知道这些int16_ts中的每一个都是内存中的两个连续字节。我想将每个字节存储在一个char中,以便每个int16将被转换为两个字节,并最终通过套接字发送整个char *

请注意我没有找到像std :: to_string之类的东西,因为我希望每个int16_t只占用两个字节。

任何帮助表示赞赏!

2 个答案:

答案 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]);