C ++基本转换

时间:2010-07-11 23:56:54

标签: c++ base

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

itoa(word,aux,2);

但海湾合作委员会不承认itoa。如何在C ++方式上转换为base 2?

谢谢;)

5 个答案:

答案 0 :(得分:2)

Here´提供了一些帮助

/* 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个) 另请注意,反向功能也在维基百科链接中。

此外,here是其他一些案例(但不是基础2)

  

此功能未在ANSI-C中定义   并且不是C ++的一部分,但是   一些编译器支持。

     

符合标准的替代方案   有些情况可能是sprintf:

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

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

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

答案 1 :(得分:1)

有一页itoa实施here

答案 2 :(得分:1)

以下是Tom的回答,根据您的代码要求修改为使用基数:

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);
}

答案 3 :(得分:1)

答案 4 :(得分:0)

如何使用递归的力量? :)

int convert_base(int v, int b){ 

    if (v == 0) return 0;   
    else 
        return (v%b+10*convert_base(v/b,b));    
}