Converter caractere em valor numérico ASCII em java


174

Eu tenho String name = "admin";
então eu façoString char = name.substring(0,1); //char="a"

Eu quero converter charpara o seu valor ASCII (97), como posso fazer isso em java?


2
JW irá String charcompilar. Pode ser que você deseja renomear a variávelString ch
— Vikas Prasad

ASCII? Tem certeza de que é isso que você quer? Java usa a codificação de caracteres UTF-16 do conjunto de caracteres Unicode (como JavaScript, .NET, VBA, VB4 / 5/6, NCHAR, NVARCHAR, NTFS, API do Windows,…). As respostas se enquadram em várias categorias: respondendo explicitamente sobre ASCII, respondendo sobre UTF-16 e respondendo sobre ASCII através de vários saltos atalhos do UTF-16 (e também alguns estão completamente errados).
— precisa

Respostas:


297

Muito simples. Basta lançar o seu charcomo um int.

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

No seu caso, você precisa primeiro obter o caractere específico da String e depois convertê-lo.

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

Embora o elenco não seja necessário explicitamente, ele melhora a legibilidade.

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

4
@VKSingla - concordou que não é necessário, mas melhora a legibilidade e ajudará o OP a entender.
— SudoRahul

1
Por que criar outra variável de char? Mesmo se você quiser o elenco, por que não fazer isso dessa maneira? int ascii = (int)name.charAt(0);
— Ricardo Cacheira

@RJ - ok eu não tinha pensado nisso
— Ricardo Cacheira

9
Os caracteres ASCII possuem códigos de 7 bits de 0 a 127. Portanto, não é necessário usar int. byte pode perfeitamente armazenar qualquer código.
— Yahor

Eu estava procurando converter o int para char, a dica do elenco me ajudou a fazer o contrário da resposta.
— Isidro Serrano Pineda

49

apenas uma abordagem diferente

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

bytes[0] representará ascii de a .. e, portanto, os outros caracteres em toda a matriz.


20

Em vez disso:

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

Você deve usar o charAt()método

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

4
Apenas para lembrar que "char" é uma palavra reservada em Java.
— Fria

12

As várias respostas que pretendem mostrar como fazer isso estão erradas porque os caracteres Java não são caracteres ASCII. Java usa uma codificação multibyte de caracteres Unicode. O conjunto de caracteres Unicode é um superconjunto de ASCII. Portanto, pode haver caracteres em uma sequência Java que não pertençam ao ASCII. Esses caracteres não possuem um valor numérico ASCII, portanto, perguntar como obter o valor numérico ASCII de um caractere Java não pode ser respondido.

Mas por que você quer fazer isso de qualquer maneira? O que você vai fazer com o valor?

Se você deseja o valor numérico para poder converter a String Java em uma string ASCII, a verdadeira questão é "como codifico uma String Java como ASCII". Para isso, use o objeto StandardCharsets.US_ASCII.


2
Resposta perfeita. A conversão de tipo é apenas um atalho que não é preciso. Que bom que sua resposta veio no início, para que as pessoas não entendam mal o conceito.
— Karthik R

A razão pela qual eu preciso conhecer a sequência ASCII é porque eu tenho dados Unicode entrando em um processo de back-end que precisa colocar ASCII puro em outro lugar, e quando eu estou recebendo não-Unicode. Geralmente, quando os usuários copiam e colam do MS Word (por exemplo, aspas duplas e simples curvadas, traços longos etc.). Mencionar StandardCharsets.US_ASCII é a coisa correta a ser feita, mas isso não diz ao questionador original como usá-lo.
— Tihamer

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

Chame o acima com: String string = "Isso" é "estranho"; System.out.println ("strings =" + string); System.out.println (displayAsciiCode (string, true)); System.out.println (displayAsciiCode (string, false)); O resultado é: strings = Isso é "estranho" 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 = t = 115 116 114 r = a = 97 n = 110 g = 103 e = 101
— Tihamér

10

Se você quiser converter a sequência inteira em valores ASCII concatenados, poderá usar isso -

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

em que você obterá 979899 como saída.

Crédito para isso .

Apenas copiei aqui para que fosse conveniente para os outros.


5

Converta o caractere para int.

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

Além disso :

int ascii = name.charAt(0);

3

Basta converter o char para um int.

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

O 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
Embora esse trecho de código possa resolver a questão, incluir uma explicação realmente ajuda a melhorar a qualidade da sua postagem. Lembre-se de que você está respondendo à pergunta dos leitores no futuro e essas pessoas podem não saber os motivos da sua sugestão de código.
— DimaSan

1

É simples, obtenha o caractere desejado e converta-o para int.

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

1

Eu sei que isso já foi respondido de várias formas, mas aqui está o meu trecho de código com uma olhada em todos os caracteres.

Aqui está o código, iniciado com a classe

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 stringe char. Uma unidade de texto no Unicode é um grafema, que é um ponto de código base seguido por zero ou mais pontos de código combinados. Um ponto de código, em Java, é codificado em UTF-16, o que pode exigir uma ou duas unidades de código de 16 bits ( char) para um ponto de código. Para iterar pontos de código, consulte esta resposta . O código já deve estar pronto para o próximo ponto de código U + 1F91E MÃO COM ÍNDICE E DADOS MÉDIOS CRUZADOS, por exemplo.
— TomTododod

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

Embora esse código possa responder à pergunta, é melhor explicar o que faz e adicionar algumas referências a ele.
— amigos estão dizendo sobre

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 apontou @Raedwald, o Unicode do Java não atende a todos os caracteres para obter o valor ASCII. A maneira correta (Java 1.7+) é a seguinte:

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

new String(byte[])usa ainda outra codificação de caracteres - o chamado padrão do sistema, que varia ao longo do tempo, máquinas e usuários; quase nunca é útil. O que você chama asciiStringainda é de UTF-16, porque é tudo o que o Java tem.
— 21818 Tom Blodget

@ TomBlodget, eu concordo. Mas acho que o OP queria saber como obter a representação ASCII de um determinado personagem. Esta é apenas uma codificação como java não pode fazer ASCII cru
— Karthik R

1

Uma maneira fácil para isso é:

    int character = 'a';

Se você imprimir "caractere", obtém 97.


1

Ou você pode usar a API do Stream para 1 caractere ou uma String iniciada em 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()));

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


0

Você pode verificar o número do ASCII com 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

Se eu estiver errado, desculpas.


0

Se você deseja o valor ASCII de todos os caracteres em uma String. Você pode usar isto:

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

e se você deseja ASCII de um único caractere em uma String, pode:

(int)a.charAt(index);

0

Eu estava tentando a mesma coisa, mas a melhor e mais fácil solução seria usar charAt e acessar os índices que deveríamos criar uma matriz inteira de tamanho [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.

Caso deseje exibir valores ASCII de String completa, você precisará fazer isso.

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

Sua saída, neste caso, será: O valor ASCII de a é: 97 O valor ASCII de d é: 100 O valor ASCII de m é: 109 O valor ASCII de m é: 109 O valor ASCII de i é: 105 O valor ASCII de n é: 110


0

A maneira mais fácil de fazer isso é:

Para String inteira em 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]);
      }
    }
}


A saída é:

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


Aqui, abc.charAt(i)fornece o único caractere da matriz String: quando atribuímos cada caractere ao tipo inteiro, o compilador digita a conversão como,

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

Mas, para um único personagem:

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


0

Para isso, podemos usar imediatamente a classe String

    input.codePointAt(index);

Gostaria de dar mais uma sugestão para que toda a string seja convertida nos códigos ascii correspondentes, usando o java 8, por exemplo, "abcde" para "979899100101".

    String input = "abcde";
    System.out.println(
            input.codePoints()
                    .mapToObj((t) -> "" + t)
                    .collect(joining()));
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.