Convertir caracteres a valores numéricos ASCII en java


174

Tengo String name = "admin";
entonces hagoString char = name.substring(0,1); //char="a"

Quiero convertir el chara su valor ASCII (97), ¿cómo puedo hacer esto en Java?


2
JW String charalguna vez compilará. Puede ser que desee cambiar el nombre de la variable aString ch
Vikas Prasad

ASCII? ¿Estás seguro de que eso es lo que quieres? Java utiliza la codificación de caracteres UTF-16 del conjunto de caracteres Unicode (al igual que JavaScript, .NET, VBA, VB4 / 5/6, NCHAR, NVARCHAR, NTFS, API de Windows, ...). Las respuestas se dividen en varias categorías: respondiendo sobre ASCII explícitamente, respondiendo sobre UTF-16 y respondiendo sobre ASCII a través de varios saltos de acceso directo desde UTF-16 (y también algunos son simplemente incorrectos).
Tom Blodget

Respuestas:


297

Muy simple. Solo lanza tu charcomo int.

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

En su caso, primero necesita obtener el Personaje específico de la Cadena y luego lanzarlo.

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

Aunque el lanzamiento no se requiere explícitamente, mejora su legibilidad.

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

44
@VKSingla: acordó que no es obligatorio, pero mejora la legibilidad y ayudará al OP a comprenderlo.
SudoRahul

1
¿Por qué crear otra variable char? Incluso si quieres el elenco, ¿por qué no hacerlo así? int ascii = (int)name.charAt(0);
Ricardo Cacheira

@RJ - ok, no lo había pensado
Ricardo Cacheira

9
Los caracteres ASCII tienen códigos de 7 bits de 0 a 127. Por lo tanto, no es necesario usar int. El byte puede almacenar perfectamente cualquier código.
Yahor

Estaba buscando convertir el int a char, la sugerencia de reparto me ayudó a hacerlo al revés de la respuesta.
Isidro Serrano Pineda

49

solo un enfoque diferente

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

bytes[0] representará ascii de a .. y, por lo tanto, los otros caracteres en toda la matriz.


20

En lugar de esto:

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

Deberías usar el charAt()método.

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

44
Solo para recordar que "char" es una palabra reservada en Java.
Frío

12

Las diversas respuestas que pretenden mostrar cómo hacer esto son incorrectas porque los caracteres Java no son caracteres ASCII. Java utiliza una codificación multibyte de caracteres Unicode. El conjunto de caracteres Unicode es un superconjunto de ASCII. Por lo tanto, puede haber caracteres en una cadena Java que no pertenezcan a ASCII. Dichos caracteres no tienen un valor numérico ASCII, por lo que preguntar cómo obtener el valor numérico ASCII de un carácter Java no tiene respuesta.

Pero, ¿por qué quieres hacer esto de todos modos? ¿Qué vas a hacer con el valor?

Si desea el valor numérico para poder convertir la cadena Java en una cadena ASCII, la verdadera pregunta es "¿Cómo codifico una cadena Java como ASCII?". Para eso, usa el objeto StandardCharsets.US_ASCII.


2
Respuesta perfecta. La conversión de tipos es solo un atajo que no es preciso. Me alegra que su respuesta haya llegado al principio para que la gente no malinterprete el concepto.
Karthik R

La razón por la que necesito saber la cadena ASCII es porque tengo datos Unicode entrando en un proceso de back-end que necesita ubicar ASCII puro en otro lugar, y lo necesito cuando obtengo no Unicode. Por lo general, cuando los usuarios copian y pegan desde MS Word (por ejemplo, comillas dobles y simples curvas, guiones largos, etc.). Mencionar StandardCharsets.US_ASCII es lo correcto, pero eso no le dice al interrogador original cómo usarlo.
Tihamer

public static String displayAsciiCode (String s, boolean useStandard) {String r = ""; byte [] ascii = nulo; if (useStandard) {ascii = s.getBytes (StandardCharsets.US_ASCII); para (int i = 0; i <ascii.length; i ++) {byte b = ascii [i]; r = r + "" + s.charAt (i) + "=" + (int) b; }} else {ascii = s.getBytes (); para (int i = 0; i <ascii.length; i ++) {byte b = ascii [i]; r = r + "" + Character.toString ((char) ascii [i]) + "=" + (int) b; }} return r; }
Tihamer

Llame a lo anterior con: String string = "This" is ”strange"; System.out.println ("cadenas =" + cadena); System.out.println (displayAsciiCode (string, true)); System.out.println (displayAsciiCode (string, false)); El resultado es: cadenas = Esto "es" extraño 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 s = 115 t = 116 r = 114 a = 97 n = 110 g = 103 e = 101
Tihamer

10

Si desea convertir la cadena completa en valores ASCII concatenados, puede usar esto:

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

en donde obtendrá 979899 como salida.

Crédito a esto .

Acabo de copiarlo aquí para que sea conveniente para los demás.


5

Convierte el carácter a int.

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

También :

int ascii = name.charAt(0);

3

Solo envía el personaje a un int.

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

El valor de numberserá 97.


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
Si bien este fragmento de código puede resolver la pregunta, incluir una explicación realmente ayuda a mejorar la calidad de su publicación. Recuerde que está respondiendo la pregunta para los lectores en el futuro, y que esas personas podrían no conocer los motivos de su sugerencia de código.
DimaSan

1

Es simple, obtén el personaje que deseas y conviértelo a int.

String name = "admin";
int ascii = name.charAt(0);

1

Sé que esto ya ha sido respondido en varias formas, pero aquí está mi código con una mirada para revisar todos los caracteres.

Aquí está el código, comenzó con la clase.

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 usa Unicode para stringy char. Una unidad textual en Unicode es un grafema, que es un punto de código base seguido de cero o más puntos de código combinados. Un punto de código, en Java, está codificado en UTF-16, lo que podría requerir una o dos unidades de código de 16 bits ( char) para un punto de código. Para iterar puntos de código, vea esta respuesta . El código ya debería estar listo para el punto de código CRUZADO U + 1F91E DE LA MANO CON ÍNDICE Y DEDOS MEDIOS, por ejemplo.
Tom Blodget

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

Si bien este código puede responder la pregunta, es mejor explicar lo que hace y agregarle algunas referencias.
Hamid Pourjam

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

Como señaló @Raedwald, Unicode de Java no atiende a todos los personajes para obtener un valor ASCII. La forma correcta (Java 1.7+) es la siguiente:

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

new String(byte[])usa otra codificación de caracteres: el llamado sistema predeterminado, que varía según el tiempo, las máquinas y los usuarios; Casi nunca es útil. Lo que llamas asciiStringsigue siendo UTF-16 porque eso es todo lo que Java tiene.
Tom Blodget

@TomBlodget, estoy de acuerdo. Pero creo que OP quería saber cómo obtener la representación ASCII de un personaje dado. Esto es solo una codificación ya que Java no puede hacer ASCII sin procesar
Karthik R

1

Una forma fácil de hacerlo es:

    int character = 'a';

Si imprime "personaje", obtiene 97.


1

O puede usar Stream API para 1 carácter o una cadena que comience en Java 1.8:

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

1

usando Java 9 => String.chars ()

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

salida - [115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119]


0

Puede verificar el número de ASCII con este código.

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

Si me equivoco, disculpas.


0

Si desea el valor ASCII de todos los caracteres en una cadena. Puedes usar esto:

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

y si quieres ASCII de un solo carácter en una cadena, puedes elegir:

(int)a.charAt(index);

0

Estaba intentando lo mismo, pero la mejor y más fácil solución sería usar charAt y acceder a los índices, deberíamos crear una matriz entera de tamaño [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.

En caso de que desee mostrar valores ASCII de la cadena completa, debe hacerlo.

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

Su salida, en este caso, será: el valor Ascii de a es: 97 El valor Ascii de d es: 100 El valor Ascii de m es: 109 El valor Ascii de i es: 105 El valor Ascii de n es: 110


0

La manera fácil de hacer esto es:

Para la cadena completa en 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]);
      }
    }
}


El resultado es:

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


Aquí, abc.charAt(i)da el carácter único de la matriz de cadenas: cuando asignamos cada carácter al tipo entero, el compilador realiza la conversión de tipo como,

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

Pero, para un solo personaje:

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


0

Para esto, podríamos usar inmediatamente String classe's

    input.codePointAt(index);

Me gustaría dar una sugerencia más para convertir toda la cadena en los códigos ascii correspondientes, utilizando java 8, por ejemplo, "abcde" a "979899100101".

    String input = "abcde";
    System.out.println(
            input.codePoints()
                    .mapToObj((t) -> "" + t)
                    .collect(joining()));
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.