| 검색 | ?
대문 / 프로그래밍 / 숫자를 문자열로 변환하는 방법

숫자를 문자열로 변환하는 방법

  • 작성자
    조재혁(Mminzkn@minzkn.com)

  • 고친과정
    2005년 4월 23일 : 처음씀
    2006년 6월 18일 : 설명추가

개요

어셈블리(Assembly) 프로그래밍을 하다가 보면 Register 또는 Memory에 저장된 어떤 결과값을 화면에 표시해야 할 필요가 있습니다. 이때 저장된 결과값을 각 진법에 맞는 자릿수 단위로 문자화하는 변환이 필요하게됩니다.

즉, 1234라는 10진수의 결과값이 저장되어 있을때 화면에 10진수로 출력하기 위해서는 1, 2, 3, 4로 자릿수로 분리하고 화면에 출력하기 위한 Ascii값으로 변환하는 과정이 필요합니다.

이때 숫자 0은 Ascii 16진수값으로 30H에 해당하고 1은 31H, ... 9는 39H가 됩니다. 즉, 분리된 1, 2, 3, 4를 화면에 출력하려면 31H, 32H, 33H, 34H 로 출력을 해야 한다는 의미입니다.

이론

각 자릿수를 분리하려면 어떻게 하면 될까요? 어떠한 값 x가 있을때 이것을 z진법으로 자릿수를 분리하려면 y = x % z 와 같이 나머지를 취하여 가장 낮은 자릿수를 구할수 있고 다음자릿수를 구하기 위해서 x = x / z(실수나눗셈이 아니고 정수나눗셈으로 소숫점은 버린다)으로 방금 구했던 가장 낮은 자릿수를 떨궈버릴수 있습니다. 이와 같은 방법을 반복하여 x가 0이 될때까지 반복하면 각 자릿수가 하나씩 뽑아져 나오게 되는것입니다.

조금 응용하여 예를 들어보겠습니다. 만약 10진수로 5라는 숫자가 있는데 이것을 2진법으로 자릿수를 분리하려면 어떻게 할까요? 먼저 y = 1 = 5 % 2입니다. 이것이 가장 낮은 자릿수가 되고 x = 2 = 5 / 2가 다음 계산할 값이 됩니다. 이제 다시 y = 0 = 2 % 2 와 같이 밑에서 두번째 자릿수가 됩니다. 다시 x = 1 = 2 / 2이 되고 y = 1 = 1 % 2와 같이 밑에서 세번째 자릿수가 됩니다. 다시 x = 0 = 1 / 2가 되어 0이 되므로 끝이 납니다. 결국 1, 0, 1로 자릿수가 분리되며 이를 Ascii로 각 자릿수를 변환하면 31H, 30H, 31H가 됩니다.

이것을 C언어로 표현하면 간단히 다음과 같은 짧은 함수가 작성될수 있을겁니다.


예제

  • C언어 예제



  • 어셈블리 예제 (MASM)



참고자료



Copyright ⓒ MINZKN.COM
All Rights Reserved.