Как преобразовать целое число в шестнадцатеричную строку в C?
Пример: целое число 50
будет преобразовано в шестнадцатеричную строку "32"
или "0x32"
.
Как преобразовать целое число в шестнадцатеричную строку в C?
Пример: целое число 50
будет преобразовано в шестнадцатеричную строку "32"
или "0x32"
.
Этот код
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
Обычно с printf
(или одним из его кузенов) с использованием спецификатора формата %x
.
Следующий код принимает целое число и выводит строку из шестнадцатеричного формата:
int num = 32424;
char hex[5];
sprintf(hex, "%x", num);
puts(hex);
дает
7ea8
Я сделал librairy, чтобы сделать шестнадцатеричное/десятичное преобразование без использования stdio.h
. Очень прост в использовании:
char* dechex (int dec);
Это будет использовать calloc()
для возврата указателя на шестнадцатеричную строку, таким образом, количество используемой памяти будет оптимизировано, поэтому не забудьте использовать free()
Здесь ссылка на github: https://github.com/kevmuret/libhex/
Интересно, что в этих ответах используется 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;
}
Чтобы преобразовать целое число в строку, также включает массив 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