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?

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

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

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

user1721904
fonte
5

Converta o caractere para int.

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

Além disso :

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

Basta converter o char para um int.

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

O valor de numberserá 97.

Daniel Lerps
fonte
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
fonte
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);
Ricardo Cacheira
fonte
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
    }
}

}


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

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

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

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

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

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