mheavers:
私は、整数の1と0の配列を持っている(多分に変換取得する必要がありますbyte
タイプ?)。私はこの6桁の文字列の同等のバイナリを取得するには、[1] [バイナリー発電へのオンラインASCII]を使用しています:
abcdef
等しくなければならない011000010110001001100011011001000110010101100110
バイナリ。
私の配列は次のように設定されているint[] curCheckArr = new int[48];
と私の文字列は、基本的に使用しているStringBuilder
文字列と同じint型を構築するために、そして呼び出しtoString()
-私は、文字列や配列などのコードへのアクセス権を持っているので。
私は、を含むが、ブラウザをクラッシュすべてが、いくつかの異なる方法を、試してみました:
StringBuilder curCheckAlphaSB = new StringBuilder(); // Some place to store the chars
Arrays.stream( // Create a Stream
curCheckString.split("(?<=\\G.{8})") // Splits the input string into 8-char-sections (Since a char has 8 bits = 1 byte)
).forEach(s -> // Go through each 8-char-section...
curCheckAlphaSB.append((char) Integer.parseInt(s, 2)) // ...and turn it into an int and then to a char
);
String curAlpha = curCheckAlphaSB.toString();
そして
String curAlpha = "";
for (int b = 0; b < curCheckString.length()/8; b++) {
int a = Integer.parseInt(curAlpha.substring(8*b,(b+1)*8),2);
curAlpha += (char)(a);
}
どうすれば最も効率的に6桁のアルファ文字列にこれらの48の1と0を変換することができますか?
チャールズDowbecki:
各文字が正確に1で表されると仮定すると、byte
あなたが入力を反復することができますInteger.parseInt()
(ので、byte
入力の値が潜在的に符号なしです):
String input = "011000010110001001100011011001000110010101100110";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < input.length(); i += 8) {
int c = Integer.parseInt(input.substring(i, i + 8), 2);
sb.append((char) c);
}
System.out.println(sb); // abcdef