簡體   English   中英

如何在C中將整數轉換為十六進制字符串?

[英]How can I convert an integer to a hexadecimal string in C?

如何在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

通常使用%x格式說明符與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;

}

我制作了一個庫來在不使用stdio.h情況下進行十六進制/十進制轉換。 使用非常簡單:

char* dechex (int dec);

這將使用calloc()來返回一個指向十六進制字符串的指針,這樣可以優化使用的內存量,所以不要忘記使用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 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

這個答案適用於那些需要從十進制表示的string (而不是從int )開始的人。

  1. 將數字的字符串表示形式轉換為整數值(您可以使用int atoi( const char * str );函數
  2. 獲得整數后,您可以使用例如sprintf函數以%x作為格式參數並將整數作為值參數將其打印為十六進制

這是一個工作示例: 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM