3-5 itob.c
これもありきたりかなぁ…
工夫があんまり思いつかない。
/* * P78 演習3-5 * 符号なし整数nをb進文字表現に変換し、sに格納する(itoa * と同様な)関数itob(n, s, b)を書け。とくにitob(n, s, 16)は * nをs中の16進文字に変換する。 * * 2007/09/12 arikui * */ #include <string.h> void reverse(char *s){ int c, i, j; for(i = 0, j = strlen(s) - 1; i < j; i++, j--){ c = s[i]; s[i] = s[j]; s[j] = c; } } void itob(unsigned int n, char *s, int b){ int i = 0, d; if (b < 2 || b > ('z' - 'a' + 10 + 1)) b = 10; do{ if ((d = n % b) < 10) s[i++] = d + '0'; else s[i++] = d - 10 + 'a'; }while((n /= b) != 0); s[i] = '\0'; reverse(s); } //Test Driver #include <stdio.h> #include <limits.h> int main(void){ int n = 255; char buf[1024]; itob(n, buf, 16); printf("itob(%d, 16) = %s\n", n, buf); itob(n, buf, 2); printf("itob(%d, 2) = %s\n", n, buf); return 0; }