0

我有一个 2 字节短 int 指针数组short int* hostdata,想将其转换为 4 字节 unsigned int 和 network byte order unsigned int* net_data。如果我这样写可以吗:

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]));
4

1 回答 1

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
};
于 2013-08-16T14:55:13.913 回答