2014-03-31 36 views
4

比方說,我有以下字符串:將字符串轉換爲二進制[的Java]

String s = "Hello, stackoverflow" 

我將如何轉換是成二進制數(0和1)?這裏有個訣竅:我不允許使用內置方法進行轉換。它必須以數學方式完成。我不知道從哪裏開始。任何人都可以將我指向正確的方向嗎?

編輯1:我看到這個question和人們建議使用getBytes(字符串),字符集UTF-8和Integer.toBinaryString。我不允許使用任何這些方法進行轉換。我還沒有聽說過36基地。

+0

dublicate http://stackoverflow.com/questions/917163/convert-a-string-like-testing123-to-binary-in-java – iMBMT

+0

沒有內置方法,甚至沒有'byte [] b = s.getBytes();'? – Astrobleme

+1

no getByes,charset UTF-8或toBinaryString – user3479783

回答

2

首先使用getByte()函數獲取字節表單字符串,然後使用Integer.toBinaryString(byte)函數。 &多數民衆贊成它。

注:〜確保Integer.toBinaryString(byte)接受一個int(或在這種情況下字節不是全部。)所以你必須按字節通過字節(可能是循環。)

編輯:〜 你可以做的是解析字符串字符char char爲每個字符你可以使用ascii值。

int tempChar = (int)ch; 

然後簡單地使用它。

Integer.toString(tempChar,2); 

試試這個。

string finalString = ""; 
for(int i = 0;i<myStr.length;i++){ 
    int tempChar = (int)ch; 
    finalString = finalString + Integer.toString(tempChar,2);//& this is not allowed then now only you need to create function for integer to binary conversion. 
} 
System.out.println("Your byte String is"+finalString); 
1

你可以嘗試這樣的: -

String s = "Hello, stackoverflow" 
byte[] bytes = str.getBytes(s); 

可以在Java

檢查getBytes() method使用指定的字符集將此String編碼字節序列, 存儲導致一個新的字節數組。

當該字符串不能在給定字符集的 中編碼時,此方法的行爲未指定。當需要對編碼過程進行更多控制時,應使用CharsetEncoder類 。

如果你想爲每個字節的位:

for(int i=0; i<array.length;i++){ 
    System.out.println(Integer.toBinaryString(0x100 + array[i]).substring(1)); 
} 
1

這似乎有點不公平,因爲我們不能使用:

byte[] b = s.getBytes(); 

這是最短的解決您的問題,但由於你不應該使用,這是一個方法:

使用String#charAt(int)

String s = "Hello, stackoverflow"; 
StringBuilder buf = new StringBuilder(); 
for (int i = 0; i < s.length(); i++) { 
    int charcterASCII = s.charAt(i); 
    // Automatic type casting as 'char' is a type of 'int' 
    buf.append(Integer.toBinaryString(characterASCII); 
    // or: 
    // buf.append(characterASCII, 2); 
    // or - custom method: 
    // buf.append(toBinary(characterASCII)); 
} 
System.out.println("answer : " + buf.toString()); 

如果你決定使用toBinary(int)方法,那就是:

public static final String toBinary (int num) { 
    char[] buf = new char[32]; 
    int charPos = 32; 
    do { 
     buf[--charPos] = i & 1; 
     i >>>= 1; 
    } while (i != 0); 
    return new String(buf); 
} 

或者,如果連這是不允許的,你最好把自己的解決方案。 :-)

相關問題