2012-07-31 51 views
1
String ntohl(int i) 
{ 
    int i1 = i % (256); 
    int i2 = (i %(65536))/(256); 
    int i3 = (i %(16777216))/(65536); 
    int i4 = (i)/(16777216); 

    int i5 = i % (2^8); 
    int i6 = (i %(2^16))/(2^8); 
    int i7 = (i %(2^24))/(2^16); 
    int i8 = i/(2^24); 

    Log.d(TAG, "i:"+i+" "+i1+"."+i2+"."+i3+"."+i4); 
    Log.d(TAG, "i:"+i+" "+i5+"."+i6+"."+i7+"."+i8); 
    return ""+i1+"."+i2+"."+i3+"."+i4; 
} 

您好,运营商优先?

我有一个方法上面列出它返回一个IPv4地址。我已经完成了计算,但是i5 i6 i7 i8不像i1 i2 i3 i4。

回答

5

使用模数可以返回您可能不期望的负数。尝试使用以下模式

int i0 = i & 0xFF; 
    int i1 = (i >> 8) & 0xFF; 
    int i2 = (i >> 16) & 0xFF; 
    int i3 = (i >> 24) & 0xFF; 
+0

谢谢!我忘了这是Java大声笑 – wallyjue 2012-07-31 07:49:42

+0

它在C,C++,C#,D和基于C语言的许多其他语言上都是一样的;); – 2012-07-31 07:51:46

6

运算符^表示Java中的Xor,但不是电源。 您应该使用Math.exp(double a)

+4

Math.pow效率非常低。使用移位。 – 2012-07-31 07:40:03

+0

你说得对。我忘记他正在处理修复号码。 – waitingkuo 2012-07-31 07:41:59

+0

...和两个幂。 +1关于'^'顺便说一句。 – 2012-07-31 07:44:40