您好我正在尝试将一些代码从Windows移植到Linux。我有这个:
itoa(word,aux,2);
但海湾合作委员会不承认itoa。如何在C ++方式上转换为base 2?
谢谢;)
答案 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)
boost :: lexical_cast ???
怎么样?http://www.boost.org/doc/libs/1_43_0/libs/conversion/lexical_cast.htm
答案 4 :(得分:0)
如何使用递归的力量? :)
int convert_base(int v, int b){
if (v == 0) return 0;
else
return (v%b+10*convert_base(v/b,b));
}