5

こんにちは、Windows から Linux にコードを移植しようとしています。私はこれを持っています:

itoa(word,aux,2);

しかし、GCC は itoa を認識しません。C++ の方法でこの基数 2 への変換を行うにはどうすればよいですか?

ありがとう ;)

4

5 に答える 5

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);
}
于 2010-07-12T00:14:36.840 に答える
2

ここにいくつかの助けがあります

/* 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進数に変換します。

于 2010-07-11T23:59:40.593 に答える
1

boost :: lexical_castはどうですか?

http://www.boost.org/doc/libs/1_43_0/libs/conversion/lexical_cast.htm

于 2010-07-12T11:16:40.893 に答える
1

ここにitoa実装のページがあります

于 2010-07-12T00:10:14.780 に答える
0

再帰の力を利用するのはどうですか?:)

int convert_base(int v, int b){ 

    if (v == 0) return 0;   
    else 
        return (v%b+10*convert_base(v/b,b));    
}
于 2014-05-27T18:34:42.107 に答える