C - конвертировать long int в шестнадцатеричную строку со знаком - PullRequest
6 голосов
/ 30 апреля 2010

MASSIVE EDIT:

У меня есть длинная переменная типа int, которую мне нужно преобразовать в 24-битную шестнадцатеричную строку со знаком без начала «0x». Строка должна состоять из 6 символов, за которыми следует символ конца строки '\ 0', поэтому необходимо добавить начальные нули.

Примеры: [-1 -> FFFFFF] --- [1 -> 000001] --- [71 -> 000047]

Ответ Это, кажется, делает трюк:

long int number = 37;
char string[7];

snprintf (string, 7, "%lX", number);

Ответы [ 4 ]

10 голосов
/ 30 апреля 2010

Посмотрите на sprintf. Спецификатор %lx делает то, что вы хотите.

9 голосов
/ 30 апреля 2010

Поскольку вам нужны только шесть цифр, вам, вероятно, придется выполнить некоторую маскировку, чтобы убедиться, что число соответствует требуемому. Примерно так:

sprintf(buffer, "%06lx", (unsigned long)val & 0xFFFFFFUL);

Имейте в виду, что вы отображаете все длинные целые числа в небольшой диапазон представлений. Вы можете проверить, находится ли число в определенном диапазоне, перед его печатью (например, -2 ^ 23

1 голос
/ 30 апреля 2010

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

sprintf(buffer, "%06X", (int)value & 0xffffff);
1 голос
/ 30 апреля 2010

Используйте itoa. В качестве аргумента берется нужная база.

Или, если подумать, нет. Используйте sprintf, который соответствует стандарту.

...