Перетворення символу в числове значення ASCII в Java


174

Я String name = "admin";
тоді це роблюString char = name.substring(0,1); //char="a"

Я хочу перетворити значення charна ASCII (97), як це зробити в Java?


2
JW String charколи-небудь складе. Можливо, ви хочете перейменувати змінну наString ch
Вікас Прасад

ASCII? Ви впевнені, що саме цього ви хочете? Java використовує кодування символів UTF-16 набору символів Unicode (як і JavaScript, .NET, VBA, VB4 / 5/6, NCHAR, NVARCHAR, NTFS, API API,…). Відповіді поділяються на кілька категорій: відповідати про ASCII явно, відповідати про UTF-16 та відповідати про ASCII за допомогою декількох скорочених стрибків з UTF-16 (а також деякі - просто неправильно).
Том Блоджет

Відповіді:


296

Дуже просто. Просто подайте свою charроль int.

char character = 'a';    
int ascii = (int) character;

У вашому випадку вам потрібно спочатку дістати конкретний символ із рядка, а потім передати його.

char character = name.charAt(0); // This gives the character 'a'
int ascii = (int) character; // ascii is now 97.

Хоча акторський склад не вимагається явно, але він покращує читабельність.

int ascii = character; // Even this will do the trick.

4
@VKSingla - Погоджено, що це не потрібно, але це покращує читабельність та допоможе ОП у розумінні.
SudoRahul

1
Навіщо створювати ще одну змінну char? Навіть якщо ви хочете акторський склад, чому б не зробити це саме так? int ascii = (int)name.charAt(0);
Рікардо Качейра

@ RJ - добре, я не думав про це
Рікардо Качейра

9
Символи ASCII мають 7-бітові коди від 0 до 127. Тому не потрібно використовувати int. байт може ідеально зберігати будь-який код.
Ягор

Я шукав перетворити int в char, натяк на литий допоміг мені зробити це навпаки з відповіді.
Ісідро Серрано Пінеда

49

просто інший підхід

    String s = "admin";
    byte[] bytes = s.getBytes("US-ASCII");

bytes[0] буде представляти ascii з .. і, таким чином, інших символів у всьому масиві.


20

Замість цього:

String char = name.substring(0,1); //char="a"

Вам слід скористатися charAt()методом.

char c = name.charAt(0); // c='a'
int ascii = (int)c;

4
Просто пам’ятайте, що «char» - це зарезервоване слово на Java.
Холодний

12

Кілька відповідей, які показують, як це зробити, - це все неправильно, оскільки символи Java не є символами ASCII. Java використовує багатобайтове кодування символів Unicode. Набір символів Unicode - це супер набір ASCII. Тож у рядку Java можуть бути символи, які не належать до ASCII. Такі символи не мають числового значення ASCII, тому запитувати, як отримати числове значення ASCII символу Java, не відповідає.

Але чому ти все-таки хочеш це робити? Що ти будеш робити зі значенням?

Якщо потрібно числове значення, щоб ви могли перетворити рядок Java в рядок ASCII, справжнє питання полягає в тому, як "кодувати Java String як ASCII". Для цього використовуйте об’єкт StandardCharsets.US_ASCII.


2
Ідеальна відповідь. Кастинг типів - це лише ярлик, який не є точним. Радий, що ваша відповідь з’явилася на початку, щоб люди не зрозуміли поняття.
Karthik R

Причиною, що мені потрібно знати рядок ASCII, є те, що я отримав дані Unicode, що надходять у бекенд-процес, який потребує розміщення чистого ASCII десь в іншому місці, і мені це потрібно, коли я отримую не-Unicode. Зазвичай, коли користувачі копіюють вставку з MS Word (наприклад, вигнуті подвійні та одинарні лапки, довгі тире тощо). Згадати StandardCharsets.US_ASCII - це правильно, але це не говорить оригінальному запитувачу, як ним користуватися.
Тихамер

загальнодоступний статичний рядок displayAsciiCode (String s, булева useStandard) {String r = ""; байт [] ascii = null; if (useStandard) {ascii = s.getBytes (StandardCharsets.US_ASCII); for (int i = 0; i <ascii.length; i ++) {байт b = ascii [i]; r = r + "" + s.charAt (i) + "=" + (int) b; }} else {ascii = s.getBytes (); for (int i = 0; i <ascii.length; i ++) {байт b = ascii [i]; r = r + "" + Character.toString ((char) ascii [i]) + "=" + (int) b; }} повернути r; }
Тіхамер

Викличте вище за допомогою: String string = "Це" дивно "; System.out.println ("рядки =" + рядок); System.out.println (displayAsciiCode (рядок, правда)); System.out.println (displayAsciiCode (рядок, помилка)); Результат: stringings = Це "є" дивним T = 84 h = 104 i = 105 s = 115 = 32 "= 63 i = 105 s = 115" = 63 = 32 s = 115 t = 116 r = 114 a = 97 n = 110 g = 103 e = 101 T = 84 h = 104 i = 105 s = 115 = 32 ¬ = -30 タ = -128 ワ = -100 i = 105 s = 115 ¬ = -30 タ = -128ン = -99 = 32 с = 115 т = 116 г = 114 а = 97 п = 110 г = 103 е = 101
Тихамер

10

Якщо ви хочете перетворити всю рядок у зв'язані значення ASCII, тоді ви можете скористатися цим -

    String str = "abc";  // or anything else

    StringBuilder sb = new StringBuilder();
    for (char c : str.toCharArray())
    sb.append((int)c);

    BigInteger mInt = new BigInteger(sb.toString());
    System.out.println(mInt);

де ви отримаєте 979899 як вихід.

Подяка цьому .

Я просто скопіював це сюди, щоб було зручно для інших.


5

Перетворити діаграму в int.

    String name = "admin";
    int ascii = name.toCharArray()[0];

Також:

int ascii = name.charAt(0);


2
public class Ascii {
    public static void main(String [] args){
        String a=args[0];
        char [] z=a.toCharArray();
        for(int i=0;i<z.length;i++){ 
            System.out.println((int)z[i]);
        }
    }
}

3
Хоча цей фрагмент коду може вирішити питання, зокрема пояснення дійсно допомагає покращити якість вашої публікації. Пам'ятайте, що ви відповідаєте на запитання читачів у майбутньому, і ці люди можуть не знати причини вашої пропозиції щодо коду.
DimaSan


1

Я знаю, що на це вже відповіли в декількох формах, але ось мій біт коду з метою перегляду всіх символів.

Ось код, розпочатий з класу

public class CheckChValue {  // Class name
public static void main(String[] args) { // class main

    String name = "admin"; // String to check it's value
    int nameLenght = name.length(); // length of the string used for the loop

    for(int i = 0; i < nameLenght ; i++){   // while counting characters if less than the length add one        
        char character = name.charAt(i); // start on the first character
        int ascii = (int) character; //convert the first character
        System.out.println(character+" = "+ ascii); // print the character and it's value in ascii
    }
}

}


1
Java використовує Unicode для stringі char. Текстова одиниця в Unicode - це графема, яка є базовою кодовою точкою, за якою слідують нульові або більше комбінуючих кодових точок. Кодова точка в Java кодується в UTF-16, що може зажадати однієї або двох 16-бітних одиниць коду ( char) для кодової точки. Щоб повторити кодові точки, дивіться цю відповідь . Код повинен бути вже готовим до перерваної кодової точки U + 1F91E, що перетинається з індексом та середніми пальцями.
Том Блоджет

1
String str = "abc";  // or anything else

// Stores strings of integer representations in sequence
StringBuilder sb = new StringBuilder();
for (char c : str.toCharArray())
    sb.append((int)c);

 // store ascii integer string array in large integer
BigInteger mInt = new BigInteger(sb.toString());
System.out.println(mInt);

Хоча цей код може відповісти на питання, краще пояснити, що він робить, і додати деякі посилання на нього.
Хамід Пурмайм

1
String name = "admin";
char[] ch = name.toString().toCharArray(); //it will read and store each character of String and store into char[].

for(int i=0; i<ch.length; i++)
{
    System.out.println(ch[i]+
                       "-->"+
                       (int)ch[i]); //this will print both character and its value
}

1

Як зазначав @Raedwald, Unicode Java не обслуговує всіх символів, щоб отримати значення ASCII. Правильний спосіб (Java 1.7+) полягає в наступному:

byte[] asciiBytes = "MyAscii".getBytes(StandardCharsets.US_ASCII);
String asciiString = new String(asciiBytes);
//asciiString = Arrays.toString(asciiBytes)

new String(byte[])використовує ще одне кодування символів - так зване системне за замовчуванням, яке залежить від часу, машин та користувачів; майже ніколи не корисний. Те, що ви називаєте asciiString, все ще є UTF-16, оскільки це все, що має Java.
Том Блоджет

@TomBlodget, я згоден. Але я думаю, що ОП хотів знати, як отримати представлення ASCII даного персонажа. Це просто кодування, оскільки java не може виконувати сирий ASCII
Karthik R

1

Простий спосіб для цього:

    int character = 'a';

Якщо ви надрукуєте "символ", ви отримаєте 97.


1

Або ви можете використовувати Stream API для 1 символу або String, починаючи з Java 1.8:

public class ASCIIConversion {
    public static void main(String[] args) {
        String text = "adskjfhqewrilfgherqifvehwqfjklsdbnf";
        text.chars()
                .forEach(System.out::println);
    }
}

1

за допомогою Java 9 => String.chars ()

String input = "stackoverflow";
System.out.println(input.chars().boxed().collect(Collectors.toList()));

вихід - [115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119]


0

Ви можете перевірити номер ASCII за допомогою цього коду.

String name = "admin";
char a1 = a.charAt(0);
int a2 = a1;
System.out.println("The number is : "+a2); // the value is 97

Якщо я помиляюся, вибачтесь.


0

Якщо ви хочете значення ASCII усіх символів у рядку. Ви можете скористатися цим:

String a ="asdasd";
int count =0;
for(int i : a.toCharArray())
    count+=i;

і якщо ви хочете ASCII одного символу в рядку, ви можете:

(int)a.charAt(index);

0

Я намагався те саме, але найкращим і простим рішенням було б використовувати charAt та отримати доступ до індексів, ми повинні створити цілий масив розміром [128].

String name = "admin"; 
int ascii = name.charAt(0); 
int[] letters = new int[128]; //this will allocate space with 128byte size.
letters[ascii]++; //increments the value of 97 to 1;
System.out.println("Output:" + ascii); //Outputs 97
System.out.println("Output:" +  letters[ascii]); //Outputs 1 if you debug you'll see 97th index value will be 1.

У випадку, якщо ви хочете відобразити значення ascii повної String, вам потрібно зробити це.

String name = "admin";
char[] val = name.toCharArray();
for(char b: val) {
 int c = b;
 System.out.println("Ascii value of " + b + " is: " + c);
}

Вашим результатом у цьому випадку буде: значення Ascii a дорівнює: 97 Ascii значення d дорівнює: 100 Ascii значення m є: 109 Ascii значення i становить: 105 Ascii значення n дорівнює: 110


0

Найпростіший спосіб зробити це:

Для всього рядка в ASCII:


public class ConvertToAscii{
    public static void main(String args[]){
      String abc = "admin";
      int []arr = new int[abc.length()];
      System.out.println("THe asscii value of each character is: ");
      for(int i=0;i<arr.length;i++){
          arr[i] = abc.charAt(i); // assign the integer value of character i.e ascii
          System.out.print(" "+arr[i]);
      }
    }
}


Вихід:

THe asscii value of each character is: 97 100 109 105 110


Тут abc.charAt(i)наведено єдиний символ масиву String: Коли ми присвоюємо кожному символу цілий тип, тоді компілятор робить тип перетворення як,

arr[i] = (int) character // Here, every individual character is coverted in ascii value

Але, для одиночного персонажа:

String name = admin; asciiValue = (int) name.charAt(0);// for character 'a' System.out.println(asciiValue);


0

Для цього ми могли б відразу скористатися строковими класами

    input.codePointAt(index);

Я хотів би дати ще одну пропозицію щодо того, щоб цілий рядок перетворився на відповідні коди ascii, використовуючи, наприклад, java 8, "abcde" в "979899100101".

    String input = "abcde";
    System.out.println(
            input.codePoints()
                    .mapToObj((t) -> "" + t)
                    .collect(joining()));
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.