문제:
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// br.readLine()은 문자열로만 받기 때문에 charAt을 이용해 문자형으로 변경
char ascii = br.readLine().charAt(0);
// bw.write((int)ascii);
// bw.close();
System.out.println((int)ascii);
}
}
위와 같이 풀 수 있었다.
자바에서 아스키 코드(알파벳 -> 숫자)로 나타내려면 char형을 (int)로 변경해주면 되고 반대로 (숫자 -> 알파벳) 나타내려면 int형을 (char)로 해주면 가능하다.
번외:
python에서는 ord와 str로 아스키 코드를 풀 수 있는데, 아래와 같이 나타낼 수 있다.
print(ord("A")) -> 65
print(str(65)) -> "A"
여기서 잠시 원하는 방식으로 나오지 않아 당황을 탔던 것이 있는데, 처음에는 bufferedWriter를 이용해 출력하고자 하니 A를 넣으면 A가 나온 것이다.
그래서 챗지피티형한테 물어보니 아뿔싸!!. write()함수는 문자를 출력하는 메서드로 문자를 전달받으면 해당 문자 그대로 출력하게 되어, A가 (int)형으로 변경시켜도 (int)가 적용되지 않고 A로 출력 된 것이다.
bw.write(Integer.toString(ascii)); 이렇게 나타내면 똑같이 아스키 코드를 나타낼 수 있다.
아스키 코드란?
ASCII(American Standard Code for Information Integer, 미국 정보 교환 표준 부호)으로
미국 ANSI(미국 국가표준 협회)에서 표준화한 정보 교환용 7비트 부호체계이다.
아스키 코드는 8bit가 아닌 7비트만 사용하는데 이때 1비트는 Parity bit라 해서 통신 에러 검출을 위해 사용된다.
예를 들어 7개의 비트 중 1의 개수가 홀수면 1, 짝수면 0을 나타내주어 통신 정보가 변질된 것을 수신측에서 알아내도록 하기 위해 사용
대충 아래와 같은 테이블에 있는 문자만 사용할 수 있다고 보면 된다.