我希望能够将字符串(带有单词/字母)转换为其他形式,例如二进制。我将如何去做这件事。我正在使用 BLUEJ (Java) 进行编码。谢谢
10 回答
通常的方法是用来String#getBytes()
获取底层字节,然后以其他形式(十六进制、二进制等)呈现这些字节。
请注意,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 中的 AString
可以通过其getBytes(Charset)
方法转换为“二进制”。
byte[] encoded = "こんにちは、世界!".getBytes(StandardCharsets.UTF_8);
此方法的参数是“字符编码”;这是字符和字节序列之间的标准化映射。通常,每个字符都被编码为单个字节,但是没有足够的唯一字节值来表示每种语言中的每个字符。其他编码使用多个字节,因此它们可以处理更广泛的字符。
通常,要使用的编码将由您正在实施的某些标准或协议指定。如果您正在创建自己的界面,并且可以自由选择,“UTF-8”是一种简单、安全且广泛支持的编码。
- 这很容易,因为您可以默认使用 UTF-8,而不是包含一些方法来记录每条消息的编码。
- 它是安全的,因为 UTF-8 可以对Java 字符串中可以使用的任何字符进行编码。
- 它得到了广泛的支持,因为它是任何 Java 实现(一直到 J2ME)都需要存在的少数字符编码之一。大多数其他平台也支持它,并且它在 XML 等标准中用作默认值。
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
这是我的实现。
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();
}
}
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);
}
}
在玩弄我在这里找到的答案以熟悉它的同时,我稍微扭曲了诺基亚的解决方案,以便将来在查看它时可以更快地理解它。
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();
}
您也可以使用 ol' good 方法来做到这一点:
String inputLine = "test123";
String translatedString = null;
char[] stringArray = inputLine.toCharArray();
for(int i=0;i<stringArray.length;i++){
translatedString += Integer.toBinaryString((int) stringArray[i]);
}
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);
}
}