【问题标题】:Converting a string to binary [Java]将字符串转换为二进制 [Java]
【发布时间】:2014-05-10 07:58:11
【问题描述】:

假设我有以下字符串:

String s = "Hello, stackoverflow"

如何将其转换为二进制数(0 和 1)?这是诀窍:我不允许使用内置方法进行转换。它必须在数学上完成。我不知道从哪里开始。谁能指出我正确的方向?

编辑 1:我看过这个 question,人们建议使用 getBytes(string)、charset UTF-8 和 Integer.toBinaryString。我不允许使用任何这些方法进行转换。我也没听说过 36-base。

【问题讨论】:

  • 没有内置方法,甚至没有byte[] b = s.getBytes();?
  • 没有 getByes、字符集 UTF-8 或 toBinaryString
  • 检查我的更新答案
  • 当然,我们可以使用s.toCharArray(),或者至少s.charAt(int)

标签: java string binary


【解决方案1】:

这似乎有点不公平,因为我们不能使用:

byte[] b = s.getBytes();

这是解决您的问题的最短方法,但由于您不应该使用它,所以这是一个不好的方法:

使用String#charAt(int)

String s = "Hello, stackoverflow";
StringBuilder buf = new StringBuilder();
for (int i = 0; i < s.length(); i++ ) {
    int characterASCII = s.charAt(i);
    // Automatic type casting as 'char' is a type of 'int'
    buf.append(Integer.toBinaryString(characterASCII));
    // or:
    // buf.append(characterASCII, 2);
    // or - custom method:
    // buf.append(toBinary(characterASCII));
}
System.out.println("answer : " + buf.toString());

如果你决定使用toBinary(int) 方法,这里是:

public static final String toBinary (int num) {
    char[] buf = new char[32];
    int charPos = 32;
    do {
        buf[--charPos] = i & 1;
        i >>>= 1;
    } while (i != 0);
    return new String(buf);
}

或者,即使这是不允许的,您最好自己制定解决方案。 :-)

【讨论】:

    【解决方案2】:

    首先使用getByte() 函数从字符串中获取字节,然后使用Integer.toBinaryString(byte) 函数。就是这样。

    注意:~确保Integer.toBinaryString(byte)接受int(或者在这种情况下不是全部字节。)所以你必须逐字节传递。(可能是for循环。)

    已编辑:~ 您可以做的是逐个字符解析字符串 char 并为每个字符获取 ascii 值。

    int tempChar = (int)ch;
    

    然后简单地使用它。

    Integer.toString(tempChar,2);
    

    试试这个。

    string finalString = "";
    for(int i = 0;i<myStr.length;i++){
        int tempChar = (int)ch;
        finalString = finalString + Integer.toString(tempChar,2);//& this is not allowed then now only you need to create function for integer to binary conversion.
    }
    System.out.println("Your byte String is"+finalString);
    

    【讨论】:

      【解决方案3】:

      你可以这样尝试:-

      String s = "Hello, stackoverflow"
      byte[] bytes = str.getBytes(s);
      

      你可以在java中查看getBytes() method

      使用命名字符集将此字符串编码为字节序列, 将结果存储到一个新的字节数组中。

      当这个字符串不能被编码时这个方法的行为 给定的字符集未指定。应该使用 CharsetEncoder 类 当需要对编码过程进行更多控制时。

      如果你想要每个字节的位:

      for(int i=0; i<array.length;i++){
          System.out.println(Integer.toBinaryString(0x100 + array[i]).substring(1));
      }
      

      【讨论】:

        猜你喜欢
        • 2015-06-21
        • 2014-10-24
        • 2013-01-30
        • 2021-02-24
        • 1970-01-01
        • 2013-10-29
        • 1970-01-01
        相关资源
        最近更新 更多