47

我希望能够将字符串(带有单词/字母)转换为其他形式,例如二进制。我将如何去做这件事。我正在使用 BLUEJ (Java) 进行编码。谢谢

4

10 回答 10

80

通常的方法是用来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 
于 2009-05-27T18:07:00.733 回答
11

一个简短的例子

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!
于 2009-05-27T20:11:58.327 回答
7

这是我的解决方案。它们的优点是:易于理解的代码,适用于所有字符。享受。

解决方案 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
于 2016-01-10T16:18:32.953 回答
6

Java 中的 AString可以通过其getBytes(Charset)方法转换为“二进制”。

byte[] encoded = "こんにちは、世界!".getBytes(StandardCharsets.UTF_8);

此方法的参数是“字符编码”;这是字符和字节序列之间的标准化映射。通常,每个字符都被编码为单个字节,但是没有足够的唯一字节值来表示每种语言中的每个字符。其他编码使用多个字节,因此它们可以处理更广泛的字符。

通常,要使用的编码将由您正在实施的某些标准或协议指定。如果您正在创建自己的界面,并且可以自由选择,“UTF-8”是一种简单、安全且广泛支持的编码。

  • 这很容易,因为您可以默认使用 UTF-8,而不是包含一些方法来记录每条消息的编码。
  • 它是安全的,因为 UTF-8 可以对Java 字符串中可以使用的任何字符进行编码。
  • 它得到了广泛的支持,因为它是任何 Java 实现(一直到 J2ME)都需要存在的少数字符编码之一。大多数其他平台也支持它,并且它在 XML 等标准中用作默认值。
于 2009-05-27T18:03:50.770 回答
3
       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
于 2017-12-28T06:53:18.133 回答
2

这是我的实现。

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();

    }
}
于 2017-04-08T22:18:52.547 回答
1
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);
  }
}   
于 2010-12-18T10:09:29.580 回答
1

在玩弄我在这里找到的答案以熟悉它的同时,我稍微扭曲了诺基亚的解决方案,以便将来在查看它时可以更快地理解它。

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();        
}
于 2014-12-03T19:12:45.490 回答
-1

您也可以使用 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]);
}
于 2013-07-24T08:23:16.383 回答
-1
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);
    }
}
于 2010-09-06T10:11:49.017 回答