如何在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
int num = 32424;
char hex[5];
sprintf(hex, "%x", num);
puts(hex);
提供
7ea8
通常使用printf
(或其变种之一)并使用%x
格式说明符。
strtol
的签名或man页链接。 - strager%X
来输出大写字母。 - user330606有趣的是这些回答将printf
当作一项已知技能。 printf
将整数转换为十六进制字符串值。
有趣的是这些答案像使用基本技能一样使用了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;
}
num
替换为n
,才能使该脚本正常工作。 - secavfrchar* dechex (int dec);
free()
释放内存。
这里是GitHub上的链接:https://github.com/kevmuret/libhex/
#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
int atoi(const char * str); 函数
- 一旦您拥有整数,您就可以使用例如
sprintf 函数和%x 作为格式参数以及您整数作为值参数来将其打印为HEX
这里是一个工作示例: https://ideone.com/qIoHNW
#include <stdio.h>
int main(void) {
int n;
char hex_val[50];
n = atoi("100663296");
sprintf(hex_val, "%x", n);
printf("%s", hex_val);
return 0;
}
#
修饰符代替编写自己的0x
,特别是在使用%p
时,其行为是实现定义的,可能已经包含了0x
。 - R.. GitHub STOP HELPING ICEsnprintf
。 - strager#
时,当值为0时,不会添加前缀“ 0x”。printf(“%#X \ n”,0);
-0
。 我认为,保留x
为小写字母和A-F
大写字母的方式,使用printf(“0x%X \ n”,a);
是值得的。0x559E7C4
- chux - Reinstate Monica