Привет я пытаюсь портировать некоторый код от Windows до Linux. У меня есть это:
itoa(word,aux,2);
Но GCC не распознает itoa. Как я могу сделать это преобразование для базирования 2 на C++ путь?
Спасибо ;)
Вот ответ Тома, измененный для использования базы в соответствии с требованиями вашего кода:
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);
}
Вы должны адаптировать ее под свои нужды (обратите внимание, что у этой функции 2 аргумента, а не 3). Также обратите внимание, что обратная функция также приведена в википедии.
Кроме того, здесь приведены некоторые другие случаи (но не для основания 2)
Эта функция не определена в ANSI-C и не является частью C++, но поддерживается некоторыми компиляторами.
Альтернативой, соответствующей стандарту, для в некоторых случаях может быть sprintf:
sprintf(str,"%d",value)
конвертирует в десятичное основание.
sprintf(str,"%x",value)
конвертирует в шестнадцатеричное основание.
sprintf(str,"%o",value)
переводит в восьмеричную систему счисления.
как насчет boost :: lexical_cast ???
http://www.boost.org/doc/libs/1_43_0/libs/conversion/lexical_cast.htm