5

您好,我正在尝试将一些代码从 Windows 移植到 Linux。我有这个:

itoa(word,aux,2);

但是 GCC 不承认 itoa。如何以 C++ 方式将此转换为 base 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);
 }

您应该根据自己的需要调整它(注意这个有 2 个参数,而不是 3 个)另外请注意反向功能也在维基百科链接中。

此外,还有一些其他情况(但不适用于 base 2)

此函数未在 ANSI-C 中定义,也不是 C++ 的一部分,但受某些编译器支持。

在某些情况下,符合标准的替代方案可能是 sprintf:

sprintf(str,"%d",value)转换为十进制基数。

sprintf(str,"%x",value) 转换为十六进制基数。

sprintf(str,"%o",value)转换为八进制。

于 2010-07-11T23:59:40.593 回答
1

这里有一个 itoa 实现的页面

于 2010-07-12T00:10:14.780 回答
1

boost::lexical_cast 呢?

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

于 2010-07-12T11:16:40.893 回答
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 回答