Преобразовать символ в числовое значение 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, Windows API,…). Ответы делятся на несколько категорий: явный ответ об ASCII, ответ о UTF-16 и ответ об ASCII через несколько кратких переходов из UTF-16 (а также некоторые из них просто неверны).
Том Блоджет

Ответы:


298

Очень просто. Просто брось 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 - Согласовано, что это не обязательно, но это улучшает читабельность и поможет ОП в понимании.
СудоРахул

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 a .. и, следовательно, другие символы во всем массиве.


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 как ASCII». Для этого используйте объект StandardCharsets.US_ASCII.


2
Идеальный ответ. Типовое приведение - это просто сокращение, которое не является точным. Рад, что ваш ответ пришел с самого начала, чтобы люди не поняли концепцию.
Karthik R

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

public static String displayAsciiCode (String s, логическое значение useStandard) {String r = ""; byte [] ascii = null; if (useStandard) {ascii = s.getBytes (StandardCharsets.US_ASCII); for (int i = 0; i <ascii.length; i ++) {byte b = ascii [i]; r = r + "" + s.charAt (i) + "=" + (int) b; }} else {ascii = s.getBytes (); for (int i = 0; i <ascii.length; i ++) {byte b = ascii [i]; r = r + "" + Character.toString ((char) ascii [i]) + "=" + (int) b; }} return r; }
Тихамер

Вызвать вышеупомянутое с помощью: String string = "This« is "странно"; System.out.println ("strings =" + string); System.out.println (displayAsciiCode (string, true)); System.out.println (displayAsciiCode (string, false)); В результате получается следующее: strings = Это «странно». T = 84 h = 104 i = 105 с = 115 = 32 «= 63 i = 105 с = 115» = 63 = 32 с = 115 т = 116 т = 114 а = 97 n = 110 g = 103 e = 101 T = 84 h = 104 i = 105 с = 115 = 32 ¬ = -30 タ = -128 ワ = -100 i = 105 с = 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

Конвертировать char в 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 с кодовой точкой INDEX и MIDDLE FINGERS CROSSED.
Том Блоджет

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, я согласен. Но я думаю, что OP хотел знать, как получить ASCII-представление данного персонажа. Это просто кодировка, поскольку java не может делать необработанный ASCII
Karthik R

1

Простой способ для этого:

    int character = 'a';

Если вы напечатаете «персонаж», вы получите 97.


1

Или вы можете использовать Stream API для 1 символа или строку, начиная с 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 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

Для этого мы могли бы сразу использовать String Classe's

    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.