String(単語/文字)をバイナリなどの他の形式に変換できるようにしたいと思います。これをどうやってやろうか。 BLUEJ(Java)でコーディングしています。ありがとう
通常の方法は、String#getBytes()
を使用して基礎となるバイトを取得し、それらのバイトを他の形式(16進数、バイナリ形式)で表示することです。
getBytes()
はデフォルトの文字セットを使用するため、文字列を特定の文字エンコーディングに変換する場合は、代わりにgetBytes(String encoding)
を使用する必要がありますが、多くの場合(ASCIIを扱う場合はesp)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!
JavaのString
は、その getBytes(Charset)
メソッドで「バイナリ」に変換できます。
byte[] encoded = "こんにちは、世界!".getBytes(StandardCharsets.UTF_8);
このメソッドの引数は「文字エンコード」です。これは、文字と一連のバイトの間の標準マッピングです。多くの場合、各文字は1バイトにエンコードされますが、すべての言語のすべての文字を表すための十分な一意のバイト値がありません。他のエンコードは複数バイトを使用するため、より広い範囲の文字を処理できます。
通常、使用するエンコーディングは、実装する標準またはプロトコルによって指定されます。独自のインターフェイスを作成していて、選択の自由がある場合、「UTF-8」は簡単で安全な、広くサポートされているエンコーディングです。
ここに私の解決策があります。その利点は次のとおりです。わかりやすいコードで、すべてのキャラクターで機能します。楽しい。
ソリューション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
これが私の実装です。
public class Test {
public String toBinary(String text) {
StringBuilder sb = new StringBuilder();
for (char character : text.toCharArray()) {
sb.append(Integer.toBinaryString(character) + "\n");
}
return sb.toString();
}
}
int no=44;
String bNo=Integer.toString(no,2);//binary output 101100
String oNo=Integer.toString(no,8);//Oct output 54
String hNo=Integer.toString(no,16);//Hex output 2C
String bNo1= Integer.toBinaryString(no);//binary output 101100
String oNo1=Integer.toOctalString(no);//Oct output 54
String hNo1=Integer.toHexString(no);//Hex output 2C
String sBNo="101100";
no=Integer.parseInt(sBNo,2);//binary to int output 44
String sONo="54";
no=Integer.parseInt(sONo,8);//oct to int output 44
String sHNo="2C";
no=Integer.parseInt(sHNo,16);//hex to int output 44
ここで見つけた答えをいじりながら慣れていくうちに、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();
}
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);
}
}