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.