short int to unsigned int conversion network byte order C ++

时间:2013-08-16 14:45:50

标签: c++ networking byte unsigned short

我有一个两字节的短int指针数组short int* hostdata,并希望将其转换为具有网络字节顺序unsigned int* net_data的4字节无符号整数。如果我这样写它可以吗:

for(int i = 0; i < numsamples; ++i)
  net_data[i] = htonl((unsigned int)hostdata[i]);

或者我应该使用reinterpret_cast这样做:

for(int i = 0; i < numsamples; ++i)
  net_data[i] = htonl(reinterpret_cast<unsigned int *>(reinterpret_cast<short int*>hostdata[i]));

1 个答案:

答案 0 :(得分:0)

如果您使用的是short integers,那么为什么在使用htonl时可以使用htons

  • htonl代表主机长网络

  • htons代表主机缩短网络

请记住,几乎所有h,n,l,s的组合都存在,除了stonhl等愚蠢的组合

不要过度复杂化,将它们添加到结构中并按原样发送它们。

struct MsgHead
{
    unsigned short utype;
    unsigned short usize;
};

// 8 bytes, no padding will be added by the compiler
struct MyPacket
{
    // Header (optional)
    MsgHead        head; // 4 bytes
    unsigned short myData[2]; // 4 bytes
};