char陣列和十六進製制格式化sprintf

2021-09-02 01:18:11 字數 1887 閱讀 3456

char ch[2];

sprintf(ch, "%x", 100);

printf("字串%%s輸出:%s\n", ch);

printf("字元%%c輸出ch:%c\n", ch);

printf("字元%%c輸出ch[0]:%c\n", ch[0]);

printf("字元%%c輸出ch[1]:%c\n", ch[1]);

printf("十六進製制%%x輸出ch:%x\n", ch);

printf("十六進製制%%x輸出ch[0]:%x\n", ch[0]);

printf("十六進製制%%x輸出ch[1]:%x\n", ch[1]);

printf("十進位制%%d輸出ch:%d\n", ch);

printf("十進位制%%d輸出ch[0]:%d\n", ch[0]);

printf("十進位制%%d輸出ch[1]:%d\n", ch[1]);

輸出:

字串%s輸出:64

字元%c輸出ch:>

字元%c輸出ch[0]:6

字元%c輸出ch[1]:4

十六進製制%x輸出ch:22ff3e

十六進製制%x輸出ch[0]:36

十六進製制%x輸出ch[1]:34

十進位制%d輸出ch:2293566

十進位制%d輸出ch[0]:54

十進位制%d輸出ch[1]:52

說明:int sprintf( char *buffer, const char *format, [ argument] … );

sprintf指的是字串格式化命令,主要功能是把格式化的資料寫入某個字串中。

100十六進製制為64,ch中存入'6''4',以%c字元輸出時ch[0]='6',ch[1]='4'

以%d十進位制數輸出時,對應這兩個字元的acsii碼為 54 52

同理,%x十六進製制輸出時,對應54 52的十六進製制36 34

printf("字元%%c輸出ch:%c\n", ch);

printf("十六進製制%%x輸出ch:%x\n", ch);

printf("十進位制%%d輸出ch:%d\n", ch);

這兩個輸出的結果是不好理解的,剛開始以為是由高位54低位52組成的乙個十六位數,測試了多次結果都不對,後來在vs裡面測試發現這個結果每次都是變化的,才想到這是指標,也就是ch的位址。

char是「特殊的」陣列,是由char組成的字串,陣列名代表位址,也是指向存放該陣列的位址的指標。對於陣列名,當以%s輸出時,就將各個字元以整體字串的形式輸出,以數字的形式(包括%c %d %x)時,輸出位址,而%c是1個位元組,位址是4個位元組,所以位址被擷取為1個位元組後輸出,將4個位元組的int型別擷取為1個位元組char型別,測試後%d會輸出63,對應ascii為'?'

可變引數函式顧名思義,就是函式引數個數是未知的是可變的。sprintf中[ argument]的引數和format中的格式化符號一一對應。

例如:

char buffer[2];

sprintf(buffer, "%x", 1000);

printf("格式化後buffer:%s\n長度:%d\n", buffer, strlen(buffer));

輸出:

格式化後buffer:3e8

長度:3

說明:首先定義乙個長度為2的char陣列buffer,然後使用sprintf將1000以十六進製制存入buffer,1000十六進製制為3e8,所有buffer長度變為3,發生溢位。

union a

;union a a;

a.i=2293567;

printf("擷取後:十進位制%d,字元%c\n", a.c, a.c);

輸出:

擷取後:十進位制63,字元?

c 十進位制 八進位制 十六進製制格式化輸出

在輸出資料時,為簡便起見,往往不指定輸出的格式,由系統根據資料的型別採取預設的格式,但有時希望資料按指定的格式輸出,如要求以十六進製制或八進位制形式輸出乙個 整數,對輸出的小數只保留兩位小數等。有兩種方法可以達到此目的。一種是我們已經介紹過的使用控制符的方法 詳情請檢視 c 輸入cout與輸出cin...

十六進製制轉八進位制的快捷方法 巧用格式化輸入輸出

最近刷題的時候遇到乙個基礎題,就是將16進製制數轉為8進製數。咋一看極其簡單,用二進位製做中介即可,簡單規劃了一下就開始動手了。問題描述 給定n個十六進製制正整數,輸出它們對應的八進位制數。輸入格式 輸入的第一行為乙個正整數n 1 n 10 接下來n行,每行乙個由0 9 大寫字母a f組成的字串,表...

為什麼需要八進位制和十六進製制 十六進製制的意義何在

程式設計中,我們常用的還是10進製.畢竟c c 是高階語言。比如 int a 100,b 99 不過,由於資料在計算機中的表示,最終以二進位制的形式存在,所以有時候使用二進位制,可以更直觀地解決 問題。但二進位制數太長了。比如int 型別占用4個位元組,32位。比如100,用int型別的二進位制數表...