Десятичное в шестнадцатеричное преобразование: проблемы с sprintf? - PullRequest
1 голос
/ 23 ноября 2011

У меня есть требование, часть которого нуждается в преобразовании из десятичного числа в шестнадцатеричное.

Я предпочитаю сделать это следующим образом:

sprintf(mcc,"%x",n);

n здесь будет целое число. Но мой коллега говорит, что это не очень хороший способ сделать это. Вместо этого он говорит, чтобы вручную преобразовать десятичное число с помощью функции, но я не получил хорошего объяснения, почему бы не использовать sprintf.

Есть ли проблемы с вышеуказанным методом, который я использую?

Должен ли я пойти на функцию, которая вручную преобразует десятичное число в шестнадцатеричное?

Ответы [ 3 ]

3 голосов
/ 23 ноября 2011

Пока вы убедитесь, что буфер, на который указывает mcc, достаточно велик для получающейся строки, я не вижу проблем.

1 голос
/ 23 ноября 2011

Если вы работаете на машине, которая поддерживает расширения GNU, вы также можете использовать asprintf.Это выделит кучу памяти, сохранит в ней строку и даст вам указатель на это.Просто убедитесь, что вы free строка, когда вы закончите с этим.

1 голос
/ 23 ноября 2011

Проблема с sprintf в том, что трудно гарантировать, что ваш буфер достаточно большой.Вместо этого используйте snprintf.

В этом случае максимально возможная длина вывода мала и легко рассчитывается, но это не всегда так просто, и я предполагаю, что именно поэтому ваш друг сказал вам не использовать sprintf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...