文字列 (単語/文字を含む) をバイナリなどの他の形式に変換できるようにしたいと考えています。どうすればこれを行うことができますか。私はBLUEJ(Java)でコーディングしています。ありがとう
10 に答える
通常の方法はString#getBytes()
、基になるバイトを取得し、それらのバイトを別の形式 (16 進数、2 進数など) で表示するために使用します。
デフォルトの文字セットを使用することに注意してください。そのgetBytes()
ため、文字列を特定の文字エンコーディングに変換する場合は、getBytes(String encoding)
代わりに使用する必要がありますが、何度も (特に ASCII を扱う場合)getBytes()
十分です (チェック例外をスローしないという利点があります)。
バイナリへの特定の変換の例を次に示します。
String s = "foo";
byte[] bytes = s.getBytes();
StringBuilder binary = new StringBuilder();
for (byte b : bytes)
{
int val = b;
for (int i = 0; i < 8; i++)
{
binary.append((val & 128) == 0 ? 0 : 1);
val <<= 1;
}
binary.append(' ');
}
System.out.println("'" + s + "' to binary: " + binary);
この例を実行すると、次の結果が得られます。
'foo' to binary: 01100110 01101111 01101111
短い例
private static final Charset UTF_8 = Charset.forName("UTF-8");
String text = "Hello World!";
byte[] bytes = text.getBytes(UTF_8);
System.out.println("bytes= "+Arrays.toString(bytes));
System.out.println("text again= "+new String(bytes, UTF_8));
プリント
bytes= [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]
text again= Hello World!
これが私の解決策です。それらの利点は次のとおりです。わかりやすいコード、すべての文字で機能します。楽しみ。
解決策 1 :
public static void main(String[] args) {
String str = "CC%";
String result = "";
char[] messChar = str.toCharArray();
for (int i = 0; i < messChar.length; i++) {
result += Integer.toBinaryString(messChar[i]) + " ";
}
System.out.println(result);
}
版画 :
1000011 1000011 100101
解決策 2 :
文字ごとに表示されるビット数を選択する可能性。
public static String toBinary(String str, int bits) {
String result = "";
String tmpStr;
int tmpInt;
char[] messChar = str.toCharArray();
for (int i = 0; i < messChar.length; i++) {
tmpStr = Integer.toBinaryString(messChar[i]);
tmpInt = tmpStr.length();
if(tmpInt != bits) {
tmpInt = bits - tmpInt;
if (tmpInt == bits) {
result += tmpStr;
} else if (tmpInt > 0) {
for (int j = 0; j < tmpInt; j++) {
result += "0";
}
result += tmpStr;
} else {
System.err.println("argument 'bits' is too small");
}
} else {
result += tmpStr;
}
result += " "; // separator
}
return result;
}
public static void main(String args[]) {
System.out.println(toBinary("CC%", 8));
}
版画 :
01000011 01000011 00100101
Javaの Aは、そのメソッドString
で「バイナリ」に変換できます。getBytes(Charset)
byte[] encoded = "こんにちは、世界!".getBytes(StandardCharsets.UTF_8);
このメソッドの引数は「文字エンコード」です。これは、文字と一連のバイトの間の標準化されたマッピングです。多くの場合、各文字は 1 バイトにエンコードされますが、すべての言語のすべての文字を表すのに十分な一意のバイト値がありません。他のエンコーディングは複数のバイトを使用するため、より広い範囲の文字を処理できます。
通常、使用するエンコーディングは、実装している標準またはプロトコルによって指定されます。独自のインターフェイスを作成していて、自由に選択できる場合は、「UTF-8」が簡単で安全で、広くサポートされているエンコーディングです。
- 各メッセージのエンコーディングに注意する方法を含めるのではなく、デフォルトで UTF-8 にできるため、簡単です。
- UTF-8 は、Java 文字列で使用できる任意の文字をエンコードできるため、安全です。
- これは、J2ME に至るまで、すべての Java 実装に存在する必要がある数少ない文字エンコーディングの 1 つであるため、広くサポートされています。他のほとんどのプラットフォームでもサポートされており、XML などの標準でデフォルトとして使用されています。
import java.lang.*;
import java.io.*;
class d2b
{
public static void main(String args[]) throws IOException{
BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter the decimal value:");
String h = b.readLine();
int k = Integer.parseInt(h);
String out = Integer.toBinaryString(k);
System.out.println("Binary: " + out);
}
}
ここで見つけた答えをいじりながら、Nuoji の解決策を少しひねり、後で見たときにすぐに理解できるようにしました。
public static String stringToBinary(String str, boolean pad ) {
byte[] bytes = str.getBytes();
StringBuilder binary = new StringBuilder();
for (byte b : bytes)
{
binary.append(Integer.toBinaryString((int) b));
if(pad) { binary.append(' '); }
}
return binary.toString();
}
public class HexadecimalToBinaryAndLong{
public static void main(String[] args) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter the hexa value!");
String hex = bf.readLine();
int i = Integer.parseInt(hex); //hex to decimal
String by = Integer.toBinaryString(i); //decimal to binary
System.out.println("This is Binary: " + by);
}
}
古い良い方法でこれを行うこともできます:
String inputLine = "test123";
String translatedString = null;
char[] stringArray = inputLine.toCharArray();
for(int i=0;i<stringArray.length;i++){
translatedString += Integer.toBinaryString((int) stringArray[i]);
}