자바 아스키코드 표 - jaba aseukikodeu pyo

미국에서 표준화가 추진된 정보교환용 7bit 부호로 정의합니다. 1962년 안시(ANSI)가 정의한 미국 표준 정보교환 코드이며 1963년 미국표준협회(ASA)에 의해 결정되어 미국의 표준부호가 되었습니다. 이 코드는 7비트의 이진수 조합으로 만들어져 총 128개의 부호를 표현합니다. 아스키코드의 처음 32개(0~31)는 프린터나 전송 제어용으로 사용되고 나머지는 숫자와 로마글자 및 도량형 기호와 문장기호를 나타냅니다. 아스키코드는 7자리의 2진코드인데 1비트의 패리티 비트를 추가하여 8비트로 많은 컴퓨터에 사용되고 있습니다.

 

 

자바 아스키코드 표 - jaba aseukikodeu pyo

 

유니코드

시간이 지나가면서 영어나 숫자 그리고 기본적인 기호뿐만 아니라 그 나라, 그 언어에서 쓰는 다양한 문자들을 처리하려면 1바이트로 정의된 아스키 코드를 확장할 필요가 있게 됩니다. 유니코드는 이런 아스키코드의 한계성을 해소할 수 있는 체계로 만들어진 코드입니다. 각 나라별 언어를 모두 표현하기 위해 나온 코드 체계가 유니코드(unicode)입니다. 유니코드는 사용중인 운영체제, 프로그램, 언어에 관계없이 문자마다 고유한 코드 값을 제공하는 새로운 개념의 코드입니다. 언어와 상관없이 모든 문자를 16비트로 표현하므로 최대 65,536자까지 포현할 수 있습니다. 자바는 모든 문서를 유니코드로 처리합니다. 유니코드표는 구할 수 없었습니다. 유니코드안에 속해있는 문자가 너무 많기 때문입니다.

 

 

[출처]

https://coding-factory.tistory.com/74

 

[Java] 아스키코드, 유니코드를 문자나 숫자로 변환하기

아스키 코드 미국에서 표준화가 추진된 정보교환용 7bit 부호로 정의합니다. 1962년 안시(ANSI)가 정의한 미국 표준 정보교환 코드이며 1963년 미국표준협회(ASA)에 의해 결정되어 미국의 표준부호가 되었습니다...

coding-factory.tistory.com

 

 

1. 문자를 숫자로 변환하는 법

1

2

3

4

5

6

7

8

9

10

11

12

13

import java.util.Scanner;

 

public class Ascii_Change {

    public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

        

    System.out.println("알파벳을 입력해주세요");

    char alpa = sc.nextLine().charAt(0);

    int ialpa = (int)alpa;

        

    System.out.println(ialpa);

    }

}

 

 

 

2. 숫자를 문자로 변환하는 법

1

2

3

4

5

6

7

8

9

10

11

12

13

import java.util.Scanner;

 

public class Ascii_Change {

    public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

        

    System.out.println("숫자를 입력해주세요");

    int alpa = sc.nextInt();

    char calpa = (char)alpa;

        

    System.out.println(calpa);

    }

}

 

 

 

이렇게 변환하는 법에 대해서는 알고 있었는데 가만 생각해보니까 누군가 나에게 아스키코드가 뭐야? 라고 묻는다면 나는 대답을 못할 것 같다. 위의 정의를 읽어봐도 좀 정확히 이해가 되지 않아서 더 찾아보았다.

 

자바 아스키코드 표 - jaba aseukikodeu pyo
출처 : https://fruitdev.tistory.com/83

 

char a = 65 를 한 후에 a를 출력하면 왜 A가 출력이 될까?

궁금하였다. 단순히 대문자 A 에 대응하는 10진수는 65이기 때문에 나오는 것은 알겠다. 그럼 내부적으로 그렇게 구현이 되어있는건가? 

 

char a = 'C' - 2  를 한 후에 a를 출력하면 왜 A가 출력이 될까?

이거는 문자 - 정수를 했는데 어떻게 알아서 출력이 되는건지? 그냥 받아들여야 하나? 그렇게 생각을 하였다.

 

그래서 좀 더 찾아본 것을 정리하려 한다.

 

char타입은 문자가 저장된다 생각하지 말고 2byte 크기의 양의 정수를 저장하는 타입이라고 생각하자.

즉 0~65535 범위의 정수를 저장할 수 있다. 이 타입이 연산이 될때에도 이 정수값이 사용이 된다.

char a = 'C'-2; 이문장에서 문자와 숫자의 연산이라고 생각하니까 개념이 어렵다.

이건 'C'에 해당하는 정수값으로 변환된후에 그값과 2를 연산해서 나온 결과값을 a에 저장할 뿐이다.

char 변수는 그냥 음수없는 정수형 타입이라고 생각하자.

차이점은 일반 정수타입은 출력을 하는 경우 단순히 그 값을 출력을 하게 되지만,

char 타입은 출력시 현재값에 대응하는 유니코드 문자가 출력된다고 생각하면 될 것 같다.

문자, 숫자 연산이 아니라 문자가 해당하는 숫자로 변환이 된후 단순히 숫자 대 숫자의 연산이 되고,

결과값도 정수로 받아들이는 기본적인 형태이다.

 

 

아스키 코드는 왜 사용하는가?

내가 생각하기에는 char은 내부적으로 정수를 이용해서 계산을 하기 때문에 문자를 표현하기 위해서는 정수의 해당하는 문자를 만들어야 한다. 그렇게 컴퓨터가 이용을 하기 위해서 필요한 것이다.