編集:申し訳ありませんが、このマシンは明らかに非標準であり、さまざまな非標準の libc
がプラグインされていることを覚えておくべきでした 学術目的の実装;-)
itoa()
として sprintf(target_string,"%d",source_int)
を使用するのが最善です。 または(さらに良いことに、バッファオーバーフローから安全であるため) snprintf(target_string, size_of_target_string_in_bytes, "%d", source_int)
. itoa()
ほど簡潔でもクールでもないことはわかっています。 、しかし、少なくとも一度書けばどこでも実行できます (tm);-)
これが古い(編集された)回答です
デフォルトの gcc libc
は正しいと述べています itoa()
を含まない 、技術的には標準の一部ではないため、他のいくつかのプラットフォームと同様に。詳細については、こちらを参照してください。
#include <stdlib.h>
もちろん、使用したかったので、すでにこれを知っています。 itoa()
おそらく別のプラットフォームで使用した後、Linuxで...コード(上記のリンクから盗んだもの)は次のようになります:
例
/* itoa example */
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int i;
char buffer [33];
printf ("Enter a number: ");
scanf ("%d",&i);
itoa (i,buffer,10);
printf ("decimal: %s\n",buffer);
itoa (i,buffer,16);
printf ("hexadecimal: %s\n",buffer);
itoa (i,buffer,2);
printf ("binary: %s\n",buffer);
return 0;
}
出力:
これがお役に立てば幸いです!
itoa
標準の C 関数ではありません。独自に実装できます。 Kernighan の初版に登場 そしてリッチー C プログラミング言語 C プログラミング言語 (「K&R2」) の第 2 版には、itoa
の次の実装が含まれています。 、64 ページ。この本では、最も負の数を正しく処理しないという事実を含め、この実装に関するいくつかの問題が指摘されています。
/* itoa: convert n to characters in s */
void itoa(int n, char s[])
{
int i, sign;
if ((sign = n) < 0) /* record sign */
n = -n; /* make n positive */
i = 0;
do { /* generate digits in reverse order */
s[i++] = n % 10 + '0'; /* get next digit */
} while ((n /= 10) > 0); /* delete it */
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
}
関数 reverse
上記で使用されているものは、2 ページ前に実装されています:
#include <string.h>
/* reverse: reverse string s in place */
void reverse(char s[])
{
int i, j;
char c;
for (i = 0, j = strlen(s)-1; i<j; i++, j--) {
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
頻繁に呼び出している場合、「snprintf を使用するだけ」というアドバイスは煩わしい場合があります。したがって、おそらく必要なものは次のとおりです。
const char *my_itoa_buf(char *buf, size_t len, int num)
{
static char loc_buf[sizeof(int) * CHAR_BITS]; /* not thread safe */
if (!buf)
{
buf = loc_buf;
len = sizeof(loc_buf);
}
if (snprintf(buf, len, "%d", num) == -1)
return ""; /* or whatever */
return buf;
}
const char *my_itoa(int num)
{ return my_itoa_buf(NULL, 0, num); }