2012-07-31 78 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