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?

Celta
fuente
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.
SudoRahul
fuente
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.

stinepike
fuente
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;
Christopher
fuente
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.

Raedwald
fuente
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.

usuario1721904
fuente
5

Convierte el carácter a int.

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

También :

int ascii = name.charAt(0);
Vineet Singla
fuente
3

Solo envía el personaje a un int.

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

El valor de numberserá 97.

Daniel Lerps
fuente
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]);
        }
    }
}
yeswanth g
fuente
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);
Ricardo Cacheira
fuente
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
    }
}

}


fuente
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);
Sandeepp Sah
fuente
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
}
iAsghar Hussain
fuente
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)
Karthik R
fuente
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.

ktlawal
fuente
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);
    }
}
matua
fuente
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]

Anurag_BEHS
fuente
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.

Raúl Vela
fuente
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);
Vikram Singh
fuente
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

Siddhartha Thota
fuente
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);

susan097
fuente
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()));
piyush tyagi
fuente