2012-12-04 66 views
4

我有一個關於將字符串類型的二進制數字轉換爲位並寫入txt文件的問題。將字符串類型的二進制數字轉換爲java中的位

例如,我們有像「0101011」這樣的字符串,並希望轉換爲位型「0101011」 ,然後寫入磁盤上的文件。

我想知道,反正是有隱蔽到串位..

我正在尋找在網絡上,他們建議使用bitarray,但我不知道

感謝

+3

是否要寫入文本「0101011」的文件,或者你想要寫字節0101011? –

+0

如果我們只是寫「010101」到文件,我猜測它是字符串類型的文件,所以它比位需要更多的空間。因此,在java文件中,我們得到字符串類型的二進制數字「010101」,然後轉換爲位類型,然後我想寫入文件.. –

回答

4

嘗試這樣的:

int value = Integer.parseInt("0101011", 2); // parse base 2 

然後在value位模式將對應於字符串的二進制解釋210。然後,您可以將value作爲byte寫入文件(假定字符串不超過8個二進制數字)。

編輯你也可以使用Byte.parseByte("0101011", 2);。但是,Java中的字節值始終是有符號的。如果你試圖用8個組解析的8位值(如"10010110",這是150十進制),你會得到一個NumberFormatException因爲上述+127值不會在byte適合。如果您不需要處理大於"01111111"的位模式,則Byte.parseByte的工作方式與Integer.parseInt一樣。

回想一下,雖然,寫入文件的字節,使用OutputStream.write(int),這需要一個int(不byte)值—即使只寫一個字節。不妨先用int值開始。

+6

爲什麼不'Byte.parseByte'? – arshajii

+0

@ A.R.S。 - 這也會起作用,除非你無法用第8位設置解析字節值。此外,向OutputStream寫入一個字節需要一個int參數(儘管它只會寫入一個字節)。我通常只是用'int'開始,儘管使用'Byte.parseByte()'確實有一個「自我記錄」的方面。 –

0

您可以嘗試下面的代碼以避免數字溢出。

long avoidOverflows = Long.parseLong("11000000000000000000000000000000", 2); 
    int thisShouldBeANegativeNumber = (int) avoidOverflows; 
    System.out.println("Currect value : " + avoidOverflows + " -> " + "Int value : " + thisShouldBeANegativeNumber); 

你可以看到輸出

Currect value : 3221225472 -> Int value : -1073741824 
+0

我想將字符串類型的二進制數字「010101」轉換爲位型 –

+1

@DcRedwing你是什麼意思'位類型'?你的意思是*字節*? – arshajii

+0

我的上述答案對於將大數轉換爲正確的十進制格式沒有任何溢出很有用。 –

0
//Converting String to Bytes 

bytes[] cipherText= new String("0101011").getBytes() 

//Converting bytes to Bits and Convert to String 

StringBuilder sb = new StringBuilder(cipherText.length * Byte.SIZE); 
     for(int i = 0; i < Byte.SIZE * cipherText .length; i++) 
      sb.append((cipherText [i/Byte.SIZE] << i % Byte.SIZE & 0x80) == 0 ? '0' : '1'); 

//Byte code of input in Stirn form 

     System.out.println("Bytecode="+sb.toString()); // some binary data 

//Convert Byte To characters 

     String bin = sb.toString(); 
     StringBuilder b = new StringBuilder(); 
     int len = bin.length(); 
     int i = 0; 
     while (i + 8 <= len) { 
     char c = convert(bin.substring(i, i+8)); 
     i+=8; 
     b.append(c); 
     } 

//String format of Binary data 

     System.out.println(b.toString()); 
相關問題