이번에는 프리미티브(primitive)를 이용하여 이런 함수를 구현하는 방법을 살펴보자. 먼저 Strtoul_inner 함수 코드부터 살펴보자. 이 함수는 strtoul 구현의 핵심으로써 반복문에서 hexatridecimal을 통해 스트링에서 큰 정수 값을 계산한다.
strtoul.c
31 unsigned long Strtoul_inner(char const s[static 1],
32 size_t i,
33 unsigned base) {
34 unsigned long ret = 0;
35 while (s[i]) {
36 unsigned c = hexatridecimal(s[i]);
37 if (c >= base) break;
38 /* 64비트에서 표현할 수 있는 가장 큰 값은
39 베이스 36으로 3w5e11264sgsf다. */
40 if (ULONG_MAX/base < ret) {
41 ret = ULONG_MAX;
42 errno = ERANGE;
43 break;
44 }
45 ret *= base;
46 ret += c;
47 ++i;
48 }
49 return ret;
50 }