当前位置: 首页 > 知识库问答 >
问题:

将字符串转换为二进制[Java]

段哲圣
2023-03-14

假设我有以下字符串:

String s = "Hello, stackoverflow"

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

编辑1:我看过这个问题,人们建议使用getBytes(字符串)、字符集UTF-8,我nteger.toBinaryString。我不允许使用任何这些方法进行转换。我也没听说过36垒。

共有3个答案

漆雕安晏
2023-03-14

你可以这样尝试:-

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

您可以检查java中的getBytes()方法

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

当该字符串无法在给定字符集中编码时,此方法的行为未指定。当需要对编码过程进行更多控制时,应使用CharsetEncoder类。

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

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

首先使用getByte()函数从字符串中获取字节,然后使用Integer。toBinaryString(字节)函数。

注意:~确保我nteger.toBinaryString(byte)接受int(或者在这种情况下不是所有的字节),所以你必须逐字节传递。(

编辑:~你可以一个字符一个字符地解析字符串

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);
钱焕
2023-03-14

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

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

如果您决定使用toBary(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);
}

或者即使这样也不允许,你最好自己解决。:-)

 类似资料:
  • 我如何将一个写为二进制的字符串转换为二进制(字节数组)? 如果我有一个字符串: 下面是当我将二进制设置为字节数组时发生的情况(字节数组返回48,这是ASCII) 我不擅长解释,所以希望上面的例子足以告诉你我想要什么。

  • 问题内容: 我需要将二进制字符串转换为十六进制字符串,但是我有问题。我通过这种方法将二进制字符串转换为十六进制字符串: 没关系!但是我丢失了字符串左侧的零。例如: 该方法返回此:123456789ABCDEF,但我想返回此: 00000123456789ABCDEF 问题答案: 而不是我将使用解析值,然后以所需的宽度(在您的示例中为21)输出值:

  • 问题内容: 我也想将我的二进制(在字符串中)转换为十六进制字符串,这只是一个程序片段,因为该程序只是另一个更大程序的一部分: 问题是我不知道填充是否有效,但是我确定该程序返回了二进制字符串的错误十六进制转换,我正在尝试这样做: http://www.wikihow.com/Convert-Binary-to- Hexadecimal PS:我需要实现它(不使用任何内置函数) 问题答案: 如果您不必

  • 问题内容: 我想将十六进制字符串转换为二进制字符串。例如,十六进制2是0010。下面是代码: 但是,这仅适用于十六进制0-9;它不适用于十六进制A-F,因为它使用。谁能增强它? 问题答案: 您需要告诉Java int是十六进制的,如下所示:

  • 问题内容: 我发现将十六进制转换为二进制的方式如下: 尽管此方法适用于较小的十六进制数,但以下十六进制数 抛出一个 因此,我编写了以下似乎可行的方法: 上面的方法基本上接受十六进制字符串中的每个字符,并在必要时将其转换为等价的二进制零,然后将其连接到返回值。这是执行转换的正确方法吗?还是我忽略了一些可能导致我的方法失败的事情? 在此先感谢您的协助。 问题答案: 会做你想要的。只需传递2的基数即可。

  • 看看我是否曲解了这些问题,下面是它的全部内容: 一个32位字没有固有的意义,可以用许多同样有效的方式来表示。将以下内容解码为二进制表示、指令、正整数和四个字符的ASCII字符串。 0000 0010 0001 0001 0100 0000 0010 0000