공부하는 남자   



  • Key log

  • 공부 하는 남자
    검색 하는 남자

  • Log in out

  • 관리자

  • 편집

  • 글 쓰기

  • Link
  • Home
  • 아스키 코드 십진수를 유니코드 십육진수로 바꾸는 법

    2014. 7. 20. 04:27   코딩문자 배우기

    아스키 (ASCII)코드 란?

    아스키코드 에 주어진 10진수를 유니코드16진수로 바꾸기 위해서는 아스키 코드가 무엇 인지 부터 알고 가야 할것 입니다.

    아스키(ASCII) 는 미국의 정보교환 표준 부호 (American Standard Code for Information Interchange) 의 줄임말로 1967년에 표준으로 제정 되었고 1986년 마지막으로 개정된 미국 웹 표준 부호 이며 유니코드의 기본 판 입니다. 

    앞서 우리는 정보 전송의 기본 단위는 8비트가 한묶음인 1바이트라고 배웠습니다.

    그것을 이진수로 나타내면 최소 [00000000] 에서  최대 [11111111] 까지  나타 낼수가  있지요 


    위에서 십진수로 계산하는 방식으로 계산 해보면 [00000000]=0 [11111111]=255 라는 값이 나오게 되니까 256가지 글자까지 대응 할수가 있습니다. 

    그런데 아스키는 모두 다 대응 하는대  들어가는 가지수가 기본 제어 문자 32개 와 특수문자 ! 부터 del 까지 94개  더해서 127 가지 밖에 안되기 때문에 최대치의 값은 127이 되고 127을 이진으로 나타내 보면 127= [01111111] 이런 값이 나오게 됩니다. 

    여기다 blank 하나를 더해 128가지를 나타내고 있습니다.

    그래서 아스키는 [00000000] 부터 [01111111] 까지의 이진수로 다 나타 낼수가 있게 됩니다. 

    그렇다 보니 이진수에서 첫자리에 오는  0 의값은 의미가 없으 므로 없애 버리고 7비트 로 도 표시가 가능 하게 됩니다. 

    그래서 아스키는 7비트가 한묶음이 되는 1바이트 코드로 이루어지게 되었 답니다.


    예를 들어 기호 !를 아스키코드(10진수)-(2진수)-(16진수)로 표시 하면 이렇게 표시를 할수가 있겠죠

       ! (33)   -   (0100001)  -(21)

    십진수로  이진수를 바꾸는 방법은 지난 시간에  공부 해봤는데요 이번엔 십진수를 십육진수로 바꾸는 방법을 한번 공부해 보도록 하겠습니다.

    십진수를 이진수로 쉽게 바꾸는 방법 참고


    ※ 참고코드
    구 버전 아스키 코드 도표참고

    신 버젼 코드 도표


    십육진수(hexadecimal)는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A. B. C. D. E. F (1~F) 이렇게 정수0부터9 알파벳 A부터 F까지 의 조합된  16자리로 이루어진  순차적 자리 올림 순환 표기 방식 이죠

    단 자리 수로 표기를 해야 하기 때문에 십진수로는 아홉수 다음 부터 두자리 수를 가지게 되므로  
    단자리 표기를 위해서는 알파벳을 대입해 표기 하는 것입니다.

    십진수로 십육진수를 표기 할수도 있겠지요
    0. 1. 2. 3. 4. 5. 6. 7. 8. 9. (10). (11). (12). (13). (14). (15) 이렇게 16자리를 만들면 되겠네요.

    만약 십진수 33을 16 진수로 바꾸면
    (15)+(15)+1=33 여기서 괄호속의 숫자는 십진수로 계산 할때 1을 더해야 한다는걸 기억 하시면 됩니다.

    표기 법에 따라 [괄호속 숫자는 십진수의 십자리 수10과 같으니까  10+10+1=21(16)
    이렇게 표기 할수가 있겠네요

    십진수와 구별 하기위해숫자 뒤에(16) 이렇게 표시를 해줘야 하죠

    그럼 십진수의11은 십육진법으로 바꾸면 어떻게 될까요?

    여기서 우리는 막히게 되는데요  16이상의  수에서는 위의 괄호 계산이 통하지만 16 이하에서는 표
    기 할수가  없게 됩니다.

    그럴경우 기존의 자연수 와 중복 되기 때문 이죠

    그래서 알파벳을 대응 시켜 줄수 밖에는 없는것 입니다.

    물론 괄호를 치고 일일이 십진수 십육진수라고 표기를 해서 쓰면 되지만 너무 복잡 해 지게 되겠지요.

    수학의 편리성을 위배 하는 경우는 배제 해야 할것 입니다.

    그래서10=A. 11=B. 12=C. 13=D. 14=E. 15=F
    부득이 이렇게 대응 하는 알파벳을 쓰기로 약속을 합니다.

    만약 십진수13을  십육진수로 바꾸게 되면 약속에 따라 D가 되는 것입니다.

    10 은 A  11 은 B 이런식으로 되겠지요.

    아스키 문에 ! 라는 특수문자가 있습니다. 
    여기에 부여된 십진수는 33 입니다.  

    이것을 십육진수로 고쳐 봅시다.

    예제1십진수 33을 십육진수로 바꾸기

    십육진수의10은 십진수의 16과 같은 것이죠
    여기다 15를 더하면33 이 되겠죠

    10(16)+10(16)+01(16)=33(10)  십육진수 로 표기 하면 21이 되겠네요 진수가 올라 가면 나열 하는 자리수가 줄어 드니까

    유니코드에서는 십육 진법으로 표기를 하며  최소 네자리수로 표기 하고 있습니다.
    유니코드의 방식에 따라 [0021] 이렇게 표기하면 되겠네요

    좀더 간단하게 공식으로 풀어보면

    16÷33=2와 나머지1 그래서 2+1=21 이런식 으로 풀어 볼수 있습니다.

    그럼 이번엔 알파벳 표시가 나오는 수로 좀더 다른 예를 들어  보겠습니다.



    예제2십육진수를 십진수로 바꾸기

    1A 라는 십육진수가 나오려면 십진수는 어떻게 될까?


    좀전에 배운 방법을 역으로 활용 하면 되겠지요

    십육진법의 십자리수는 F가 끝나면 +1이 추가 되어 자리 바꿈이 일어납니다. 

    즉 1은 십진수16이 되는 것이고 A는 십진수 10 이죠

    답은 16+10=26이 되겠네요

    공식으로 풀면 1A= 1×16+A  여기서 십육진수 의 A는 십진수 10 이므로
    답은 26 이 되는 것입니다.


    십진수 26을 역으로 십육진수로 바꿀려면 16÷26=1과 나머지는10 십진수10은 십육진수A
    그래서 1+A=1A

    십육진수의 십자리가 2가 되었다는건 F가 두번 끝났다 라고 생각 하시면 되겠지요

    그리고 F의 십진수 값은 15이고 F가 끝나고 그 다음 수를 표할때는 한자리가 올라가서 더해 진다는것  이것을 잘 기억 해야 합니다.

    0. 1. .....~....9. A. B. C. D. E. F. 10. 11. 12. 13.......~19. 1A. 1B. 1C. 1D. 1E. 1F.다음 1 이
    더해진수는 십자리에 하나가 더해 져서 20 이 되고  20부터 21. 22. 23. 24.이렇게 순차적으로 올라 가겠지요.

    그러면 위의 문제 1A는 상의자리수1은 F까지 한번 끝난후 자리바꿈이 일어난 수16이 되고
    A는 10이라고 약속한 수이니까 16+10이 되어서 16진수 1A는 십진수 26 이라는 계산이 나오게 되지요 

    여기서 십육진수의 십자리에 해당 하는 수는 십진수의 16의 배수가 된다는걸 알수가 있겠지요.


    십진수 32는 십육진수 20 이 된다는거  거꾸로 십육진수 20 = 16×2=32  십진수32가 됩니다.

    예제3십육진수 3F를 십진수로 바꾸기 

    그럼 십육진수 3은 16을 세번 더한 것과
    같으니 16+16+16=48 이 되겠네요 그럼 F는 15와 같으니까  48+15=63 이라는 십진수가 되는 것이죠.

    공식으로 풀면 3×16+F=48+15=63 이렇게 되겠죠

    이렇게 아래와 같은 공식이 나오는것을 알수가 있습니다.
    십진수=16÷X=F...(a). 16÷F=G...(b). 16÷G=H...(c). 16÷H=Z...(없음)=역수 십육진수

    X=십진수  F=몫  a= 16으로 나눈후 나머지로 제일 아래 자리수, b=두째 자리 수, c=셋째 자리수, Z=최 상위 자리수


    ※십진수를 십육진수로 나타낼때 기억 해야 할것※

    16 으로 나누어서 나머지에 해당 하는 수는 0부터 9 이하의 수와 알파벳 A부터 F 까지  대응 해 준다.

    그리고 16으로 나누었을때 몫이 단자리수로 나누어 지면 십의 자리로 자리 바꿈이  발생 하고
    두자리수에서 16 이상의 값이 나오면 3자리인 100의자리수로 자리 바꿈이 일어 난다는 것도 기억 해야 합니다.

    예제4) 십진수 250을 십육진수로 바꾸기

    250 = 16÷250 = 15와 나머지는 10이 되는데  15는 F와 같으니까 F를 쓰고 나머지가  10이니까 10은 A와같다고 배웠지요 

    그래서 값은 F+A=FA 이렇게 됩니다.

    유니코드 표기법에 따라 [00FA] 이렇게 표기를 합니다.

    그런데 256같이 16으로 나누었을때 두자리수의 몫인16이  나오고 나머지는 0이 되는데
    이때 단자리 수는0의 값이 정해지고 두자리수의 몫의 값을 또16으로 나누면 나머지 0 과1 이라는 몫을 가지게 되므로 이제 이럴때 자리도 늘어나 자리 바꿈이 일어 나게 됩니다.

    우리는 위에서15가 F와 같고 그이후에는 자리수가 한자리 올라 간다고 배웠지요 
    그럼 백의 자리로 1이 올라가고 나머지가 없는 0인 경우엔 십과 일자리수는 0 0으로 표시 합니다.

    그래서 십진수256은 십육진수의100 이 되는 것이지요

    좀더 쉽게 계산 해 봅시다.

    예제5) 십진수 505 를 십육진수로 바꾸기 

    16÷505=31...9) 
    ※여기서 16으로 나눈후 나머지 9는 단자리수의 값이 됩니다.

    자여기서 나머지를 빼버리고 몫31을 또 16으로 나눕니다. 

    이유는 단자리의 수는 정해졌 지만 그 윗 자리들은 아직 정해지지 않아서 입니다.

    16÷31=1...15) 

    16÷31=1과 나머지가 15가 되네요

    그럼 이제 모든 값이 나왔으니 표기를 해 봅시다.

    처음 16 으로 나눈후의 나머지 가 단자리수가 됩니다.
     
    다음 으로 나눈후의 나머지 는 상위 자리수가 됩니다.

    16 으로 나누어 지는 수가 없을때 까지 자리수가 올라가게 됩니다.

    단자리수의 9그리고 그 위의 자리는 15니까 F와 같습니다.   

    최상위 자리의 수는 1 그래서 십육진수의 값은 1F9가 되겠죠

    아주 길게 나열 했지만 공식이 뽑아 지는 과정을 설명 하므로써 이후에 응용을 자유 자재로
    할수가 있을것 같아 서 이니 이해해 주시길 바랍니다.



    T,back:     Comment: