こんにちは、Windows から Linux にコードを移植しようとしています。私はこれを持っています:
itoa(word,aux,2);
しかし、GCC は itoa を認識しません。C++ の方法でこの基数 2 への変換を行うにはどうすればよいですか?
ありがとう ;)
これがトムの答えです。コードに必要なベースを使用するように変更されています。
void itoa(int n, char s[], std::size_t base = 10) {
const char digits[] = "0123456789abcdef";
int i, sign;
if (base < 2 || base > 16)
throw std::invalid_argument("invalid base");
if ((sign = n) < 0) /* record sign */
n = -n; /* make n positive */
i = 0;
do { /* generate digits in reverse order */
s[i++] = digits[n % base]; /* get next digit */
} while ((n /= base) > 0); /* delete it */
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
}
ここにいくつかの助けがあります
/* 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);
}
ニーズに合わせて調整する必要があります(これには3つではなく2つの引数があることに注意してください)。また、逆関数がウィキペディアのリンクにもあることに注意してください。
さらに、他のいくつかのケースがあります(ただし、ベース2ではありません)
この関数はANSI-Cで定義されておらず、C ++の一部ではありませんが、一部のコンパイラでサポートされています。
場合によっては、標準に準拠した代替手段はsprintfです。
sprintf(str,"%d",value)
10進数に変換します。
sprintf(str,"%x",value)
16進数に変換します。
sprintf(str,"%o",value)
8進数に変換します。
boost :: lexical_castはどうですか?
http://www.boost.org/doc/libs/1_43_0/libs/conversion/lexical_cast.htm
ここにitoa実装のページがあります
再帰の力を利用するのはどうですか?:)
int convert_base(int v, int b){
if (v == 0) return 0;
else
return (v%b+10*convert_base(v/b,b));
}