자바에서 int를 char로 변환


124

아래는 코드 스 니펫입니다.

int a = 1;
char b = (char) a;
System.out.println(b);

그러나 내가 얻는 것은 빈 출력입니다.

int a = '1';
char b = (char) a;
System.out.println(b);

출력으로 1을 얻습니다.

누군가 이것을 설명 할 수 있습니까? 첫 번째 스 니펫에서와 같이 int를 char로 변환하려면 어떻게해야합니까?


9
" 숯불에 int를 변환? "어쩌면 b = (char)('0' + a)만에 0 <= a <= 9.
johnchen902

6
10 진수 값 01은 인쇄되지 않는 문자입니다. 제대로 작동하고 있습니다.
apraetor

답변:


109
int a = 1;
char b = (char) a;
System.out.println(b);

ascii 값 1 (인쇄 할 수없는 머리글 시작 문자)로 문자를 인쇄합니다.

int a = '1';
char b = (char) a;
System.out.println(b);

ascii 값 49 ( '1'에 해당하는 문자)를 인쇄합니다.

숫자 (0-9)를 변환하려면 여기에 48을 더하고 캐스트하거나 Character.forDigit(a, 10);.

intascii 값 으로 변환하려면 Character.toChars(48)예를 들어 사용할 수 있습니다 .


2
System.out.println('b'+3);b3대신 101println을 사용하여 얻을 수 있습니까? 대신 다른 방법으로 printf?
Asif Mushtaq

2
@UnKnown 다음과 같이 char 대신 문자열로 만들어야합니다. System.out.println ( "b"+ 3);
Haggra

Character.toCharsASCII 값이 아닌 유니 코드 코드 포인트에서 작동합니다. int를 char로 캐스트하면 동일합니다 (BMP 전용).
weaknespase

55

내 대답은 jh314의 대답과 비슷하지만 조금 더 자세히 설명하겠습니다.

이 경우 수행해야 할 작업은 다음과 같습니다.

int a = 1;
char b = (char)(a + '0');
System.out.println(b);

여기서는 문자가 실제로 ASCII 값으로 표현되기 때문에 '0'을 사용했습니다. '0'은 문자이며 값 48로 표시됩니다.

우리는 입력 (a + '0')하고 이것을 더하기 위해 Java는 '0'을 ASCII 값인 48로 변환하고 a는 1이므로 합계는 49입니다.

(char)(49)

로 캐스팅 int했습니다 char. 49에 해당하는 ASCII는 '1'입니다. 이 방법으로 모든 숫자를 char로 변환 할 수 있으며 방법을 사용한 .toString()다음 .charAt()방법으로 숫자를 빼는 것보다 더 똑똑하고 더 나은 방법입니다.


42

당신이 찾고있는 것 같습니다 Character.forDigit방법을 .

final int RADIX = 10;
int i = 4;
char ch = Character.forDigit(i, RADIX);
System.out.println(ch); // Prints '4'

char에서 int로 다시 변환 할 수있는 메서드도 있습니다.

int i2 = Character.digit(ch, RADIX);
System.out.println(i2); // Prints '4'

를 변경하면 RADIX16 진수 (기수 16)와 최대 36 (또는 Character.MAX_RADIX라고도 함 )의 기수도 지원할 수 있습니다 .


@ProgrammingNub "int의 값"을 정의합니다. . 숫자 4를 인쇄하고 싶지 않습니까? 아니면 int의 Ascii 값을 65인쇄하고 A싶습니까? 여기 내 대답은이 질문의 요구 사항에 대한 예상 동작을 인쇄하기 때문입니다. 참조 ideone.com/09LAFR
사이먼 포스 버그

10
int a = 1;
char b = (char) a;
System.out.println(b);

안녕, 나는 같은 문제를 겪었지만 내가 한 일은 다음 코드였습니다.

int a = 1
char b = Integer.toString(a).charAt(0);
System.out.println(b);

이것으로 십진수 값을 char 유형으로 얻습니다. 문자열의 유일한 값은 'a'이고 아시다시피 해당 문자열의 'a'위치는 0에서 시작하기 때문에 인덱스 0과 함께 charAt ()을 사용했습니다.

내 영어가 잘 설명되지 않으면 죄송합니다. 도움이 되었기를 바랍니다.


3
int a = 1;
char b = (char) (a + 48);

ASCII에서 모든 문자에는 고유 한 번호가 있습니다. 그리고 char '0'은 십진수 48, '1'은 49 등입니다. 그래서 만약

char b = '2';
int a = b = 50;

1

아무도 여기서 진짜 "질문"에 답하지 않았습니다. 당신은 int를 char로 올바르게 변환하고 있습니다. ASCII 테이블에서 10 진수 값 01은 인쇄되지 않는 문자 인 "제목의 시작"입니다. ASCII 테이블을 찾고 33에서 7E 사이의 int 값을 변환 해보십시오. 당신이 볼 캐릭터를 줄 것입니다.


1

char에 cast integer를 입력 할 때마다 해당 int의 ascii 값을 반환합니다 (더 나은 이해를 위해 ascii 테이블을 살펴 봅니다).

    int a=68;
    char b=(char)a;

    System.out.println(b);//it will return ascii value of 68

    //output- D

2
일종의 .... char는 UTF-16 코드 단위입니다. UTF-16 코드 단위 인 68은 유니 코드 코드 포인트 U + 0044 를 나타내는 데 필요한 유일한 코드 단위 입니다. System.out은 텍스트 인코딩을 기본 인코딩으로 변경합니다 (아마도 프로그램이 실행중인 터미널 / 콘솔과 일치 함). println은 문자를 받아 인코딩을 시도합니다. 문자는 완전한 코드 포인트이므로 시도 할 수 있습니다. U + 0044는 거의 모든 문자 세트의 문자이기 때문에,이를 손상되지 않게 터미널에 가져 오는 데 성공해야합니다. ASCII와 관련이 없습니다.
Tom Blodget

0

자바에서 문자 int입니다. 첫 번째 스 니펫은 기본 문자 인코딩 체계 (유니 코드 일 가능성이 있음)의 1 값에 해당하는 문자를 인쇄합니다. 유니 코드 문자 U + 0001은 인쇄되지 않는 문자이므로 출력이 표시되지 않습니다.

문자 '1'을 인쇄하려면 사용중인 인코딩 체계에서 '1'값을 조회 할 수 있습니다. 유니 코드에서는 49 (ASCII와 동일)입니다. 그러나 이것은 숫자 0-9에서만 작동합니다.

char 대신 String을 사용하고 Java의 내장 toString()메소드를 사용하는 것이 더 나을 수 있습니다 .

int a = 1;
String b = toString(a);
System.out.println(b);

이것은 시스템 인코딩이 무엇이든 작동하며 여러 자리 숫자에 대해 작동합니다.


1
죄송하지만 char는 int가 아닙니다. 왜냐하면 다른 수의 바이트로 만들어 졌기 때문입니다 (quick ref. char-int representation-stackoverflow ). 문자는 숫자로 표현할 수 있습니다. 맞습니다.하지만 정수는 아닙니다.
morels

또한 두 번째 줄에 "String b = Integer.toString (a);"이 표시되어야한다고 생각합니다.
Faulty

char 데이터 유형은 java.lang.Character에 잘 정의되어 있으며 int 및 유니 코드 코드 포인트 및 코드 단위와의 관계도 있습니다.
Ian

0

ASCII 코드를 기반으로 ASCII 문자를 인쇄하고 그 이상으로 가고 싶지 않은 경우 (유니 코드 문자와 같이) 변수를 바이트로 정의한 다음 (char) 변환을 사용할 수 있습니다. 즉 :

public static void main(String[] args) {
    byte b = 65;
    for (byte i=b; i<=b+25; i++) {
        System.out.print((char)i + ", ");
    }

BTW, 문자 'A'의 ASCII 코드는 65입니다.


0

정수 값이 알파벳 / 문자의 ASCII 값인지 확인하십시오.

그렇지 않다면 그것을 만드십시오.

for e.g. if int i=1

그런 다음 64를 추가하여 65 = 'A'의 ASCII 값이되도록합니다.

char x = (char)i;

print x

// 'A' will be printed 

0

기본이 아닌 클래스 유형에 대해 이야기하는 경우 다음 트릭을 수행해야합니다.

Integer someInt;
Character someChar;

someChar = (char)Integer.parseInt(String.valueOf(someInt));

프로세스에서 문자열로 만들 필요가 없으며 일치하지 않는 수의 괄호가 있습니다.
Simon Forsberg

사이먼, "괄호". 그럼 어떻게 조언 해?
matua

-1

완전한 변환 개념은 다음 프로그램을 참조하십시오.

class typetest{
    public static void main(String args[]){
        byte a=1,b=2;
        char c=1,d='b';
        short e=3,f=4;
        int g=5,h=6;
        float i;
        double k=10.34,l=12.45;
        System.out.println("value of char variable c="+c);
        // if we assign an integer value in char cariable it's possible as above
        // but it's not possible to assign int value from an int variable in char variable 
        // (d=g assignment gives error as incompatible type conversion)
        g=b;
        System.out.println("char to int conversion is possible");
        k=g;
        System.out.println("int to double conversion is possible");
        i=h;
        System.out.println("int to float is possible and value of i = "+i);
        l=i;
        System.out.println("float to double is possible");
    }
}

희망, 적어도 무언가를 도울 것입니다


-2

문자를 해당 정수로 변환하려면 다음과 같이 할 수 있습니다.

int a = (int) 'a';
char b = (char) a;
System.out.println(b);

이것은 ASCII에 정상적으로 인쇄 할 수없는 항목이 있기 때문에 발생합니다.

예를 들어, 숫자 97에서 122는 소문자 a에서 z에 해당하는 정수입니다.


-2
public class String_Store_In_Array 
{
    public static void main(String[] args) 
    {
        System.out.println(" Q.37 Can you store string in array of integers. Try it.");

        String str="I am Akash";
        int arr[]=new int[str.length()];
        char chArr[]=str.toCharArray();
          char  ch;
        for(int i=0;i<str.length();i++)
        {

            arr[i]=chArr[i];
        }
        System.out.println("\nI have stored it in array by using ASCII value");
        for(int i=0;i<arr.length;i++)
        {

            System.out.print(" "+arr[i]);
        }
        System.out.println("\nI have stored it in array by using ASCII value to original content");
        for(int i=0;i<arr.length;i++)
        {
             ch=(char)arr[i];

            System.out.print(" "+ch);
        }
    }
}

2
코드 덤프 대신 설명을 제공하십시오.
Jules Dupont

이 코드 전용 게시물이 질문에 답할 수 있지만 그 이유에 대한 설명을 추가하십시오. 이것은 미래의 사용자가 자신의 상황에 대한 답을 평가하는 데 도움이 될 것입니다.
Tom Brunberg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.