2011-08-25 6 views
1

어셈블러를 배우려고하고 숫자를 문자열로 변환하는 함수를 작성하려고합니다. 변환이 성공하면정수를 문자열로 변환

int numToStr(long int num, unsigned int bufLen, char* buf) 

기능은 사용 된 바이트 수를 반환해야하고, 그렇지 않으면 0 : 내가 쓰고 싶은 함수의 서명에서 더 C와 같은 방식으로 다음과 같습니다.

현재 접근 방식은 간단한 알고리즘입니다. 모든 경우 버퍼가 가득차면 0을 반환하십시오.

  1. 숫자가 음수인지 확인하십시오. 그렇다면 char을 buf[0]에 작성하고 버퍼의 현재 위치를 증가 시키십시오.
  2. 나누기가 0이 될 때까지 10으로 나누고 나머지를 버퍼에 반복적으로 저장하십시오.
  3. 버퍼의 번호를 반대로 지정하십시오.

이 변환을 수행하는 가장 좋은 방법입니까?

+0

이 접근법의 한 가지 문제점은 역순으로 숫자를 가져 오는 것입니다. – cnicutar

+0

@cnicutar 내 접근 방식의 포인트 3을 읽었습니까? – fuz

+0

보지 못했습니다 :-) – cnicutar

답변

2

이것은 내가 본 적이있는 itoa의 모든 단일 구현 방법과 거의 같습니다.

언급하지 않지만 처리하고 싶은 한 가지는 경계 검사입니다 (예 : bufLen을 쓰지 않도록합니다).

부호와 관련하여 : -을 작성한 후에는 값을 무효화해야합니다. 또한 -은 최종 반전에서 제외해야합니다. 대안은 처음에는 기호를 기억하고 끝에서 (반전 직전에) 쓸 수 있습니다.

마지막으로 대문자로 사용하는 경우 0을 올바르게 작성해야합니다 (예 : 0). 빈 문자열이 아니어야합니다.

+0

네, 고마워요. 벌써 경계 검사를하고있어. 나중에 쓰는 것도 옵션입니다. – fuz

관련 문제