我有一个两字节的短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]));
答案 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
};