Подтвердить что ты не робот

Как преобразовать целое число в шестнадцатеричную строку в C?

Как преобразовать целое число в шестнадцатеричную строку в C?

Пример: целое число 50 будет преобразовано в шестнадцатеричную строку "32" или "0x32".

4b9b3361

Ответ 1

Этот код

int a = 5;
printf("%x\n", a);

печатает

5

Этот код

int a = 5; 
printf("0x%x\n", a);

печатает

0x5

Этот код

int a = 89778116;
printf("%x\n", a);

печатает

559e7c4

Если вы заглавны в x в формате, он заглаживает шестнадцатеричное значение:

int a = 89778116;
printf("%x\n", a);

печатает

559e7c4

Если вы хотите напечатать указатели, вы используете спецификатор формата p:

char* str = "foo";
printf("0x%p\n", str);

печатает

0x01275744

Ответ 2

Обычно с printf (или одним из его кузенов) с использованием спецификатора формата %x.

Ответ 3

Следующий код принимает целое число и выводит строку из шестнадцатеричного формата:

int  num = 32424;
char hex[5];

sprintf(hex, "%x", num);
puts(hex);

дает

7ea8

Ответ 4

Я сделал librairy, чтобы сделать шестнадцатеричное/десятичное преобразование без использования stdio.h. Очень прост в использовании:

char* dechex (int dec);

Это будет использовать calloc() для возврата указателя на шестнадцатеричную строку, таким образом, количество используемой памяти будет оптимизировано, поэтому не забудьте использовать free()

Здесь ссылка на github: https://github.com/kevmuret/libhex/

Ответ 5

Интересно, что в этих ответах используется printf, как это указано. printf преобразует целое число в шестнадцатеричное строковое значение.

//*************************************************************
// void prntnum(unsigned long n, int base, char sign, char *outbuf)
// unsigned long num = number to be printed
// int base        = number base for conversion;  decimal=10,hex=16
// char sign       = signed or unsigned output
// char *outbuf   = buffer to hold the output number
//*************************************************************

void prntnum(unsigned long n, int base, char sign, char *outbuf)
{

    int i = 12;
    int j = 0;

    do{
        outbuf[i] = "0123456789ABCDEF"[num % base];
        i--;
        n = num/base;
    }while( num > 0);

    if(sign != ' '){
        outbuf[0] = sign;
        ++j;
    }

    while( ++i < 13){
       outbuf[j++] = outbuf[i];
    }

    outbuf[j] = 0;

}

Ответ 6

Чтобы преобразовать целое число в строку, также включает массив char или управление памятью.

Чтобы обрабатывать эту часть для таких коротких массивов, код мог использовать составной литерал, поскольку C99, чтобы создать пространство массива, на лету, Строка действительна до конца блока.

#define UNS_HEX_STR_SIZE ((sizeof (unsigned)*CHAR_BIT + 3)/4 + 1)
//                         compound literal v--------------------------v
#define U2HS(x) unsigned_to_hex_string((x), (char[UNS_HEX_STR_SIZE]) {0}, UNS_HEX_STR_SIZE)

char *unsigned_to_hex_string(unsigned x, char *dest, size_t size) {
  snprintf(dest, size, "%X", x);
  return dest;
}

int main(void) {
  // 3 array are formed v               v        v
  printf("%s %s %s\n", U2HS(UINT_MAX), U2HS(0), U2HS(0x12345678));
  char *hs = U2HS(rand());
  puts(hs);
  // `hs` is valid until the end of the block
}

Выход

FFFFFFFF 0 12345678
5851F42D