2013-07-18 26 views
6

バイトの配列に変換する1と0の文字列があります。バイナリ文字列をバイト配列に変換する

たとえば、String b = "0110100001101001"これを長さ2のbyte[]に変換するにはどうすればよいですか?

+0

なぜ長さ2ですか? –

+3

@kocko彼は16ビットを持っています... –

+0

文字列bに基づいて、位置0に '104'、位置1に' 105'という長さ2のバイトが必要ですか? –

答えて

21

これを2の整数に解析し、バイト配列に変換します。実際には、あなたは16ビットを持っているので、まれに使用されたshortを打ち破る時間です。

short a = Short.parseShort(b, 2); 
ByteBuffer bytes = ByteBuffer.allocate(2).putShort(a); 

byte[] array = bytes.array(); 
+3

文字列に含まれるビットが多すぎて、 「長い」変数でも保持されますか? –

+0

これはとても涼しいです!私はそれを知らなかった、ありがとう! :) –

+0

文字列が大きすぎる場合は、 'NumberFormatException'を取得します。私はこの小さな例では32文字未満であると仮定しています。 –

12

別の簡単な方法は、次のとおりです。

String b = "0110100001101001"; 
byte[] bval = new BigInteger(b, 2).toByteArray(); 
+1

"1110100001101001"を解析できません –

+0

http://stackoverflow.com/questions/24158629/biginteger-tobytearray-returns-purposeful-leading-zerosを参照してください いくつかの問題が発生する可能性があります。 – will

+0

私はbyte [] fspec = new BigInteger( "10000000"、2).toByteArray();を表示していますが、期待値の代わりに[B @ 3b22cdd0 - なぜですか? – Line

0

はあなたのバイナリ文字列を使用すると、メソッド次使用することができ、残りを得ることなく8で割ることができると仮定すると:

/** 
* Get an byte array by binary string 
* @param binaryString the string representing a byte 
* @return an byte array 
*/ 
public static byte[] getByteByString(String binaryString){ 
    Iterable iterable = Splitter.fixedLength(8).split(binaryString); 
    byte[] ret = new byte[Iterables.size(iterable) ]; 
    Iterator iterator = iterable.iterator(); 
    int i = 0; 
    while (iterator.hasNext()) { 
     Integer byteAsInt = Integer.parseInt(iterator.next().toString(), 2); 
     ret[i] = byteAsInt.byteValue(); 
     i++; 
    } 
    return ret; 
} 

忘れてはいけませんあなたの従業員にguava libを追加してください。

compile group: 'com.google.guava', name: 'guava', version: '19.0' 

をし、プロジェクトのGradleにこれを追加します:

アンドロイドでは、アプリのGradleのに追加する必要があります

allprojects { 
    repositories { 
     mavenCentral() 
    } 
} 

アップデート1

This post containsソリューションをグアバのLibを使用せずに。

関連する問題