如何在C中将整数转换为hex字符串?
如何在C中将整数转换为hex字符串?
示例:整数50
将转换为hex字符串"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,则将hex值大写:
int a = 89778116; printf("%X\n", a);
版画
559E7C4
如果要打印指针,请使用p格式说明符:
char* str = "foo"; printf("0x%p\n", str);
版画
0x01275744
通常使用%x
格式说明符的printf
(或其中一个表兄弟)。
以下代码采用整数forms,并以hex格式生成一个字符串 :
int num = 32424; char hex[5]; sprintf(hex, "%x", num); puts(hex);
给
7ea8
有趣的是,这些答案使用printf
就像是给定的。 printf
将整数转换为hex字符串值。
//************************************************************* // 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; }
我做了一个librairy来进行hex/十进制转换而不使用stdio.h
。 使用非常简单:
char* dechex (int dec);
这将使用calloc()
来返回指向hex字符串的指针,这样就可以优化使用的内存量,所以不要忘记使用free()
这里是github上的链接: https : //github.com/kevmuret/libhex/
将整数转换为字符串还涉及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 vvv 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