转换string(如testing123)转换为Java中的二进制文件
我想能够将string(用文字/字母)转换为其他forms,如二进制。 我将如何去做这件事。 我在BLUEJ(Java)编码。 谢谢
通常的方法是使用String#getBytes()
获取底层字节,然后以其他forms(hex,二进制)呈现这些字节。
请注意, getBytes()
使用默认的字符集,所以如果您希望string转换为某种特定的字符编码,您应该使用getBytes(String encoding)
而不是多次(特别是在处理ASCII时) getBytes()
就足够了具有不会抛出检查exception的优点)。
具体转换为二进制,这里是一个例子:
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);
这个方法的参数是“字符编码”。 这是一个字符和一个字节序列之间的标准化映射。 通常,每个字符都被编码为单个字节,但是没有足够的唯一字节值来表示每种语言中的每个字符。 其他编码使用多个字节,所以他们可以处理更广泛的字符。
通常,要使用的编码将由您正在实施的某个标准或协议指定。 如果你正在创build自己的界面,并有自由select,“UTF-8”是一个简单,安全,广泛支持的编码。
- 这很容易,因为不是包含某种方式来logging每个消息的编码,您可以默认为UTF-8。
- 这是安全的,因为UTF-8可以编码任何可以在Javastring中使用的字符。
- 它得到了广泛的支持,因为它是任何Java实现中都要求的一小部分字符编码之一,一直到J2ME。 大多数其他平台也支持它,它在XML等标准中被用作默认值。
这是我的解决scheme。 他们的优点是:易于理解的代码,适用于所有angular色。 请享用。
解决scheme1:
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
解决scheme2:
可以select每个字符显示的位数。
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
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); } }
在玩弄这些答案的时候,我发现这里已经熟悉了,所以我把诺基的解决scheme加了一点,以便将来能够更快地理解它。
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 Test { public String toBinary(String text) { StringBuilder sb = new StringBuilder(); for (char character : text.toCharArray()) { sb.append(Integer.toBinaryString(character) + "\n"); } return sb.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); } }
你也可以用ol好方法来做到这一点:
String inputLine = "test123"; String translatedString = null; char[] stringArray = inputLine.toCharArray(); for(int i=0;i<stringArray.length;i++){ translatedString += Integer.toBinaryString((int) stringArray[i]); }