2012-12-05 52 views
1

這裏的的情況是......我有一個包含字符的32位二進制字符串(例如,1011011100100110101010101011010)的二進制文件,我想將它轉換爲整數...我有已經試圖用parse-Int做到這一點,但如果最重要的值是1,我得到一個負數,我不想那麼...然後我試着用parse-Long,它沒關係,但之後當我得到這個整數,我必須將它發送到另一個只能接收整數的類,因此我從long轉換爲int,然後再次得到一個負整數...唯一的方法是使用一段代碼我發現它做了相反的事情(從int到字符串),但我不明白如何改變 - 將其轉換。這是關於面具,我不知道很多東西。轉換長串到整數,未parseLong或parseInt函數

下面是代碼:

private static String intToBitString(int n) { 
     StringBuffer sb = new StringBuffer(); 
     for (int mask = 1 << 31; mask != 0; mask = mask >>> 1) 
      sb.append((n & mask) == 0 ? "0" : "1"); 
     return sb.toString(); 
    } 

預先感謝您...

+0

什麼語言是什麼? C#? –

+0

java ...對不起,我忘了提及。 –

+0

在Java中長整型爲int不應產生負數。你如何做演員? –

回答

3

設置爲1的最高位的整數負整數,無論​​位的數量。只需將標題零添加到字符串中,或​​者使用按位AND(x & 0x7FFFFFFF)清除最高位。你只能在java int中存儲一個31位的正整數。即使您將這個值分配給long(長x = 0xFFFFFFFF,將爲-1),符號位也會展開,現在您的負長(您可以寫入0x0FFFFFFFFL,但是將預期的00000000FFFFFFFF分配爲長)。如果這是不需要的行爲,您仍然需要清除高位。

int a = 0x80000007; // High bit 1 - negative! 
    long b = a; // Sign expands! 
      // Clearing high bits (mind leading 0 and 
      // the long type suffix (L) in the hex constant: 
    long c = b & 0x0FFFFFFFFL; 
    System.out.println(a + ":" + Long.toHexString(b) + ":" 
      + Long.toHexString(c)); 

輸出:-2147483641:ffffffff80000007:80000007

+0

它不是整數...在我的文件中它們是二進制形式的字符... parseLong返回一個正數,因爲它確實是這樣的... –

+0

如果正32位值的最高位是1,則不能存儲它在java int。 unsigned int類型是必需的,但Java沒有這樣的。然後存儲。當從int分配long時,符號位將擴展,long也將爲負數。只要清楚你的長度的最高位,如前所述。 – h22

+0

其實我不知道我將如何清除最高位與位...我不知道很多事情在Java中,但我需要這個轉換器的另一個項目,這就是爲什麼我問...我只是有將二進制文件轉換爲整數,然後通過.setWord將它們發送到另一個類,它只能接收整數... –