Java에서 문자를 ASCII 숫자 값으로 변환


174

나는 String name = "admin";
그때String char = name.substring(0,1); //char="a"

charASCII 값 (97) 으로 변환하고 싶습니다 .Java에서 어떻게 할 수 있습니까?


2
JW는 String char항상 컴파일됩니다. 변수 이름을 다음과 같이 바꾸고 싶을 수도 있습니다.String ch
Vikas Prasad

ASCII? 그것이 당신이 원하는 것입니까? Java는 유니 코드 문자 집합의 UTF-16 문자 인코딩을 사용합니다 (JavaScript, .NET, VBA, VB4 / 5 / 6, NCHAR, NVARCHAR, NTFS, Windows API 등). 대답은 여러 가지 범주로 나뉩니다. ASCII에 대해 명시 적으로 대답하고 UTF-16에 대해 대답하고 UTF-16에서 몇 가지 단축 된 도약을 통해 ASCII에 대해 대답합니다 (일부는 명백한 잘못입니다).
Tom Blodget

답변:


296

매우 간단합니다. 그냥 캐스팅 charint로서 int.

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

귀하의 경우 먼저 문자열에서 특정 문자를 가져 와서 캐스팅해야합니다.

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

캐스트는 명시 적으로 필요하지 않지만 가독성을 향상시킵니다.

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

4
@VKSingla-필요하지는 않지만 가독성이 향상되고 OP가 이해하는 데 도움이됩니다.
SudoRahul

1
다른 char 변수를 작성하는 이유는 무엇입니까? 캐스트를 원한다고해도 왜 그렇게하지 않습니까? int ascii = (int)name.charAt(0);
Ricardo Cacheira

@RJ-알았어.
Ricardo Cacheira

9
ASCII 문자는 0에서 127까지의 7 비트 코드를 갖습니다. 따라서 int를 사용할 필요가 없습니다. 바이트는 모든 코드를 완벽하게 저장할 수 있습니다.
Yahor

나는 int를 char로 변환하려고하고 있었고, 캐스트 힌트는 대답과 다른 방식으로 그것을하는 데 도움이되었습니다.
Isidro Serrano Pineda

49

다른 접근법

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

bytes[0] 는 전체 배열에서 다른 문자의 ASCII를 나타냅니다.


20

이 대신에 :

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

charAt()방법을 사용해야합니다 .

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

4
"char"는 Java에서 예약어라는 것을 기억하십시오.
콜드

12

Java 문자가 ASCII 문자가 아니기 때문에이를 수행하는 방법을 보여주기 위해 제시된 몇 가지 답변이 모두 잘못되었습니다. Java는 유니 코드 문자의 멀티 바이트 인코딩을 사용합니다. 유니 코드 문자 집합은 수퍼 ASCII 집합입니다. 따라서 Java 문자열에 ASCII에 속하지 않는 문자가있을 수 있습니다. 이러한 문자에는 ASCII 숫자 값이 없으므로 Java 문자의 ASCII 숫자 값을 얻는 방법을 묻는 것은 대답 할 수 없습니다.

그러나 어쨌든 이것을하고 싶습니까? 당신은 그 가치로 무엇을 할 것입니까?

Java 문자열을 ASCII 문자열로 변환 할 수있는 숫자 값을 원한다면 실제 질문은 "Java 문자열을 ASCII로 인코딩하는 방법"입니다. 이를 위해 object를 사용하십시오 StandardCharsets.US_ASCII.


2
완벽한 답변. 타입 캐스팅은 정확하지 않은 바로 가기입니다. 사람들이 개념을 오해하지 않도록 귀하의 답변이 시작된 것을 기쁘게 생각합니다.
Karthik R

ASCII 문자열을 알아야하는 이유는 순수한 ASCII를 다른 곳에 배치 해야하는 백엔드 프로세스로 유니 코드 데이터를 가져 와서 비 유니 코드를 가져와야하기 때문입니다. 일반적으로 사용자가 MS Word에서 복사 붙여 넣기를하는 경우 (예 : 굽은 큰 따옴표 및 작은 따옴표, 긴 대시 등) StandardCharsets.US_ASCII를 언급하는 것이 올바른 방법이지만 원래 질문자에게 사용 방법을 알려주지는 않습니다.
Tihamer

public static String displayAsciiCode (String s, 부울 useStandard) {문자열 r = ""; 바이트 [] ascii = null; if (useStandard) {ascii = s.getBytes (StandardCharsets.US_ASCII); for (int i = 0; i <ascii.length; i ++) {바이트 b = ascii [i]; r = r + ""+ s.charAt (i) + "="+ (int) b; }} else {ascii = s.getBytes (); for (int i = 0; i <ascii.length; i ++) {바이트 b = ascii [i]; r = r + ""+ Character.toString ((char) ascii [i]) + "="+ (int) b; }} return r; }
Tihamer 19

위와 같이 호출하십시오. String string = "This is is strange"; System.out.println ( "strings ="+ 문자열); System.out.println (displayAsciiCode (문자열, true)); System.out.println (displayAsciiCode (문자열, 거짓)); 결과는 다음과 같습니다. strings = 이것은 이상합니다 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

전체 문자열을 연결된 ASCII 값으로 변환하려면 다음을 사용할 수 있습니다.

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

여기서 출력으로 979899가 표시됩니다.

에 신용 .

방금 다른 사람들에게 편리하도록 여기에 복사했습니다.


5

char을 int로 변환하십시오.

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

또한 :

int ascii = name.charAt(0);

3

그냥 문자를 int로 캐스팅하십시오.

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

값은 number97입니다.


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
이 코드 스 니펫은 문제를 해결할 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 실제로 도움이됩니다. 앞으로 독자들에게 질문에 대한 답변을 제공하므로 해당 사람들이 코드 제안의 이유를 모를 수도 있습니다.
DimaSan

1

간단하고 원하는 문자를 가져 와서 int로 변환하십시오.

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

1

나는 이것이 이미 여러 형태로 대답되었다는 것을 알고 있지만 여기에 모든 문자를 살펴볼 수있는 코드가 있습니다.

클래스로 시작한 코드는 다음과 같습니다.

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는 string및에 유니 코드를 사용합니다 char. 유니 코드의 텍스트 단위는 기본 코드 포인트 다음에 0 개 이상의 결합 코드 포인트가 오는 grapheme입니다. Java의 코드 포인트는 UTF-16으로 인코딩되므로 char코드 포인트에 하나 또는 두 개의 16 비트 코드 단위 ( ) 가 필요할 수 있습니다. 코드 포인트를 반복하려면이 답변을 참조하십시오 . 예를 들어, 코드는 예를 들어 INDEX 및 MIDDLE FINGERS CROSSED 코드 포인트가있는 U + 1F91E 핸드에 사용할 준비가되어 있어야합니다.
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);

이 코드는 질문에 대한 답변을 제공 할 수 있지만, 그 기능을 설명하고 이에 대한 참조를 추가하는 것이 좋습니다.
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

@Raedwald가 지적했듯이 Java의 유니 코드는 ASCII 값을 얻기 위해 모든 문자를 처리하지 않습니다. 올바른 방법 (Java 1.7 이상) 은 다음과 같습니다.

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

new String(byte[])또 다른 문자 인코딩 (소위 시스템 기본값)을 사용하며 시간, 기계 및 사용자에 따라 다릅니다. 거의 유용하지 않습니다. 당신이 부르는 asciiString것은 여전히 ​​Java UTF-16이기 때문에 UTF-16입니다.
Tom Blodget

@TomBlodget, 동의합니다. 그러나 OP는 주어진 문자의 ASCII 표현을 얻는 방법을 알고 싶었다고 생각합니다. 이것은 자바가 원시 ASCII를 수행 할 수 없기 때문에 인코딩 일뿐입니다
Karthik R

1

이를위한 쉬운 방법은 다음과 같습니다.

    int character = 'a';

"문자"를 인쇄하면 97이됩니다.


1

또는 Java 1.8에서 시작하는 1 문자 또는 문자열에 Stream API를 사용할 수 있습니다.

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

1

Java 9 => String.chars () 사용

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

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


0

이 코드로 ASCII 번호를 확인할 수 있습니다.

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

내가 틀렸다면 사과드립니다.


0

문자열에있는 모든 문자의 ASCII 값을 원하는 경우 이것을 사용할 수 있습니다 :

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

그리고 String에서 단일 문자의 ASCII를 원하면 다음을 수행 할 수 있습니다.

(int)a.charAt(index);

0

나는 같은 일을 시도했지만 가장 쉽고 쉬운 해결책은 charAt을 사용하고 인덱스에 액세스하는 것이 [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.

완전한 문자열의 ASCII 값을 표시하려면이 작업을 수행해야합니다.

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

이 경우 출력은 다음과 같습니다. Ascii 값 a는 : 97 Ascii 값 d는 : 100 Ascii 값 m은 : 109 Ascii 값 i는 : 105 Ascii 값 n은 : 110


0

이를 수행하는 쉬운 방법은 다음과 같습니다.

전체 문자열을 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]);
      }
    }
}


출력은 다음과 같습니다.

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


여기 abc.charAt(i)에 String 배열의 단일 문자를 제공합니다. 각 문자를 정수 유형에 할당하면 컴파일러는 다음과 같이 유형 변환을 수행합니다.

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

그러나 단일 문자의 경우 :

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


0

이를 위해 우리는 즉시 String classe를 사용할 수 있습니다.

    input.codePointAt(index);

"abcde"에서 "979899100101"과 같은 java 8을 사용하여 문자열 전체를 해당 ASCII 코드로 변환하는 것에 대한 제안을 하나 더 제시하고 싶습니다.

    String input = "abcde";
    System.out.println(
            input.codePoints()
                    .mapToObj((t) -> "" + t)
                    .collect(joining()));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.