2015-11-23 3 views
1

Я хочу преобразовать строку text в 8-разрядные номера ascii и попытаться сохранить их в ArrayList.Как преобразовать строку в 8-бит ascii в java?

for (int i = 0; i < text.length(); i++) { 
     char c = text.charAt(i); 
     int ascii_dec = (int) c; 
     String ascii_str = Integer.toBinaryString(ascii_dec); 
     int ascii_bi = Integer.parseInt(ascii_str.toString()); 
     messageList.add(ascii_bi); 
} 

Но выход для abc подобен

[1100001,1100010,1100011] 

Есть ли способ сделать это как

[01100001,01100010,01100011] 

ответ

1

Попробуйте это комплексное решение, чтобы решить эту проблему.

public static void main(String[] args) { 
    ArrayList<String> messageList = new ArrayList<String>(); 
    String text = "abc"; 
    byte[] bytes = text.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(' '); 
    } 
    messageList.add(binary.toString()); 

    System.out.println(Arrays.toString(bytes)); 

    for (String object : messageList) { 
     System.out.println("'" + text + "' to binary: " + object); 
    } 

    // this part below to help you to save 2-bit binary converted in int 
    // arraylist to store string 
    ArrayList<String> stringList = new ArrayList<String>(); 
    for (int i = 0; i < text.length(); i++) { 
     stringList.add(messageList.get(0).split(" ")[i]); 
    } 
    // arraylist to store int converted 
    ArrayList<Integer> intList = new ArrayList<Integer>(); 
    for (String str : stringList) { 
     for (int i = 0; i < str.length(); i += 2) { 
      intList.add(Integer.parseInt(str.substring(i, i + 2), 2)); 
      System.out.print(str.substring(i, i + 2) + " "); 
     } 

    } 
    System.out.println(); 
    // nowretrieve int in arraylist to convert in 2-binary if you wont 
    for (Integer integer : intList) { 
     System.out.print(integer + " "); 
    } 
} 

Выход

[97, 98, 99] 
'abc' to binary: 01100001 01100010 01100011 
01 10 00 01 01 10 00 10 01 10 00 11 
1 2 0 1 1 2 0 2 1 2 0 3  
+0

Спасибо. Но что, если я хочу использовать числа ascii как int в arraylist для других целей, например, преобразовать его в символьные сигналы qpsk. Мне нужно, чтобы он был как int, а не строкой. –

+0

@ Lihang.H Я изменяю решение, я думаю, теперь больше interessante – Abdelhak

+0

@Adbelhak Спасибо за это. Просто задайте небольшой вопрос. Могу ли я использовать int как в двоичном, но не десятичном в списке массивов? –

0
String in = "abc"; 
    List<Integer> ascii = new ArrayList<>(); 

    for (char c : in.toCharArray()) { 
     ascii.add((int) c); 
     String intString = String.format("%08d", Integer.parseInt(Integer.toBinaryString((int) c))); 
     System.out.println(intString); 
    } 
Смежные вопросы