這里有兩種情況:
①第一種情況:如果我得到的是一個16進制數,我通過肉眼看到的就是16進制顯示(這里看到的肯定打印結果),比如85,我知道這個數是16進制,但是代碼里面卻不是,在內存空間里卻是按照int類型10進制進行存儲的。需要將它在內存空間里面也轉化為16進制的存儲。
#include<stdio.h>
#include<stdint.h>
intmain(){
uint8_tstr[6]={0};
uint8_tnum_16=0;
uint32_tnum=85;
printf("%7cDECHEX\r\n",'\0');
printf("num%3d%3x\r\n",num,num);
inttemp=0;
sprintf((char*)str,"%d",num);
sscanf((char*)str,"%x",&temp);
num_16=temp;
printf("num_16%3d%3x\r\n",num_16,num_16);
return0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
運行結果:
DECHEX
num8555
num_1613385
1
2
3
1
2
3
上述10進制存儲的16進制數85就轉化成了16進制存儲的16進制數85。**此時,經過此轉換的數大小已經變了,它們大小是不相等的。**同理可以將16進制轉換為10進制數。
②第二種情況:在第一種情況下,我是將肉眼看到的16進制數(為什么這么說呢?本來我是存儲的10進制數,在經過系統或者某段代碼的轉化后,顯示給我的是16進制結果,我看到的結果沒有變化,但是在內存空間已經發生變化了。)轉化為10進制數。這里經過系統或者某段代碼進行轉換的過程就是第二種情況:**10進制到16進制的轉換,但是并不會改變值,但是打印出來的記過是已經改變了,如果我要使用這個結果就得通過第一種情況進行轉化。
這種轉化非常的簡單:
printf("%x",num);
1
1
格式化打印,會自動將結果轉化為16進制。如果想要將結果進行存儲,可參考第一種情況,直接將上述的sprintf和sscanf中的格式化參數%d和%x交換即可。