Подтвердить что ты не робот

Преобразование строки (например, test123) в двоичный файл на Java

Я хотел бы иметь возможность конвертировать String (со словами/буквами) в другие формы, такие как двоичные. Как бы я это сделал. Я кодирую в BLUEJ (Java). Благодаря

4b9b3361

Ответ 1

Обычный способ - использовать String#getBytes() для получения базовых байтов, а затем представить эти байты в другой форме (hex, binary whatever).

Обратите внимание, что getBytes() использует кодировку по умолчанию, поэтому, если вы хотите, чтобы строка была преобразована в определенную кодировку символов, вы должны использовать getBytes(String encoding) вместо этого, но много раз (esp при работе с 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 

Ответ 2

Более короткий пример

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!

Ответ 3

A String в Java можно преобразовать в "двоичный" с помощью метода getBytes(Charset).

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

Аргумент этого метода является "кодировкой символов"; это стандартизованное сопоставление между символом и последовательностью байтов. Часто каждый символ кодируется в один байт, но не хватает уникальных байтовых значений для представления каждого символа на каждом языке. Другие кодировки используют несколько байтов, поэтому они могут обрабатывать более широкий диапазон символов.

Обычно используемая кодировка будет определяться определенным стандартом или протоколом, который вы реализуете. Если вы создаете свой собственный интерфейс и имеете свободу выбора, "UTF-8" - это простая, безопасная и широко поддерживаемая кодировка.

  • Это легко, потому что вместо того, чтобы включать какой-либо способ отметить кодировку каждого сообщения, вы можете по умолчанию использовать UTF-8.
  • Это безопасно, потому что UTF-8 может кодировать любой символ, который может использоваться в символьной строке Java.
  • Он широко поддерживается, потому что он является одним из небольшого количества кодировок символов, которые должны присутствовать в любой реализации Java, вплоть до J2ME. Большинство других платформ поддерживают его, и он используется по умолчанию в таких стандартах, как XML.

Ответ 4

Вот мои решения. Их преимущества заключаются в следующем: простой код понимания, работает для всех персонажей. Наслаждайтесь.

Решение 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:

Возможность выбора количества отображаемых бит за char.

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

Ответ 5

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

Ответ 6

Это моя реализация.

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

    }
}

Ответ 7

Во время игры с ответами, которые я нашел здесь, чтобы ознакомиться с этим, я немного исказил решение Nuoji, чтобы я мог быстрее понять его, глядя на него в будущем.

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

Ответ 8

>       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 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

Ответ 9

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

Ответ 10

Вы также можете сделать это с помощью хорошего метода 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]);
}