2013-08-16 44 views
0

我有一个双字节短int指针数组short int* hostdata并希望将其转换为一个4字节无符号整数与网络字节顺序unsigned int* net_data。它是好,如果我把它写这样的:短整型为无符号整数转换网络字节顺序C++

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

您的2个代码示例似乎并不等同于我,因为您在您的秒示例中投射指针而不解除引用 - 意图是?另外,你想实现哪种转换?短int可以有负数,unsigned int不能 - 你更喜欢在这种情况下下溢吗?截断?重新解释? – griffin

+0

你想对负值做什么? –

+0

你有一个指针数组,'short int * hostdata [SIZE]',或一个数组'short int hostdata [SIZE]''的数组吗?如果是后者,你想用负数做什么? – Joni

回答

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 
}; 
+0

其实我试图将2字节格式的数据(短整型)存储为4字节格式(int)。我不应该使用htonl吗? –

+0

@AvbAvb使用'struct'来保存'short's和'htons'将它们转换为网络顺序。 –

相关问题