這裡有兩種情況:
①第一種情況:如果我得到的是乙個16進製制數,我通過肉眼看到的就是16進製制顯示(這裡看到的肯定列印結果),比如85
,我知道這個數是16進製制,但是**裡面卻不是,在記憶體空間裡卻是按照int
型別10進製進行儲存的。需要將它在記憶體空間裡面也轉化為16進製制的儲存。
#include
#include
int main();
uint8_t num_16 = 0;
uint32_t num = 85;
printf(
"%7cdec hex \r\n", '\0');
printf(
"num %3d %3x\r\n", num, num)
; int temp = 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)
;return 0;
}
執行結果:
dec hex
num 85 55
num_16 133 85
上述10進製儲存的16進製制數85
就轉化成了16進製制儲存的16進製制數85
。**此時,經過此轉換的數大小已經變了,它們大小是不相等的。**同理可以將16進製制轉換為10進製數。
②第二種情況:在第一種情況下,我是將肉眼看到的16進製制數(為什麼這麼說呢?本來我是儲存的10進製數,在經過系統或者某段**的轉化後,顯示給我的是16進製制結果,我看到的結果沒有變化,但是在記憶體空間已經發生變化了。)轉化為10進製數 。這裡經過系統或者某段**進行轉換的過程就是第二種情況:**10進製到16進製制的轉換,但是並不會改變值,但是列印出來的記過是已經改變了,如果我要使用這個結果就得通過第一種情況進行轉化。
這種轉化非常的簡單:
printf
("%x"
, num)
;
格式化列印,會自動將結果轉化為16進製制。如果想要將結果進行儲存,可參考第一種情況,直接將上述的sprintf
和sscanf
中的格式化引數%d
和%x
交換即可。 C語言實現16進製製到2進製的轉換
1.沒有注意到字串儲存的時候後面會自動加乙個 0,因此想存放乙個長度為n的字串,需要開闢n 1 個位元組的空間,最後乙個位元組存放 0.2.迴圈過程中注意迴圈變數每次迭代過程中都要想終止條件靠近,避免死迴圈.3.利用陣列下標的控制來模擬棧 include include include void h...
10進製數轉換成16進製制
十六進製制的元素個數固定,而且還有對應編號,可以用查表法.乙個int型別十進位制數在32位作業系統中佔4個位元組,32位2進製數取它的低8位,例如60,在記憶體中以二進位制數0011 1100存放,而乙個十六進製制數中每一位數對應二進位制中4位數,因此可以將十進位制數與f進行 與 運算,得出低四位 ...
C 利用順序棧實現將10進製數轉換為16進製制數
利用順序棧來寫進製轉換比將陣列逆序簡單許多,本文章採用的棧定義為順序棧定義 下面這個是標頭檔案 include c 標頭檔案 include stdio.h include string.h using namespace std define maxlen 100 定義線性表的最大容量 typed...