C語言之詭異字串
我們來看一個例子。
int main() {
int i = 65;
printf((const char *)&i);
system("pause");
return 0;
}
你會驚訝的發現,上面列印的是字母A,然後再來看一個例子
int main(){
int i = 4407873;
printf((const char *)&i);
system("puase");
return 0;
}
你會發現列印的是ABC,那麼這些詭異是數字組成的字串是怎麼來的呢?
首先你要知道什麼是小端儲存,而int型是小端儲存,什麼是小端儲存就不介紹了,讀者可以自行百度,或者翻閱部落格。
拿65的例子來說明吧,我們將65是int型,佔4個位元組,而一個位元組佔8位,這裡將65轉換成32位下的2進位制數字為00000000000000000000000001000001,而int型是小端儲存,那麼久可以看成是10000010000000000000000000000000,然後再結合printf函式來解釋,printf函式從左往有讀取,一次讀一個位元組,所以先讀的是10000010,然後再讀到00000000,這個不就剛好是’\0’的2進位制數嗎。所以讀出來就是A,同樣的,你將4407873轉換成2進位制,以小端儲存的方式,然後再讀取,你會發現讀取的依然ABC’\0’,讀到0結束。
相關文章
- C語言之字串與指標C語言字串指標
- C語言之字串處理函式C語言字串函式
- c語言之字串轉大寫聯絡C語言字串
- iOS開發系列--C語言之陣列和字串iOSC語言陣列字串
- C語言之家C語言
- C語言之基本概念C語言
- C語言之氣泡排序C語言排序
- C語言之結構體C語言結構體
- C語言之環形佇列C語言佇列
- C語言之static關鍵字C語言
- C語言之輸入輸出C語言
- Go語言之Goroutine與通道、異常處理Go
- C語言之位段使用詳解C語言
- C語言之標準檔案操作C語言
- C語言之霍夫曼編碼學習C語言
- C語言之雙向連結串列C語言
- C語言之單向連結串列C語言
- C 語言之布林型別介紹型別
- C語言之動態記憶體管理C語言記憶體
- c語言之解釋複雜指標C語言指標
- iOS開發系列--C語言之指標iOSC語言指標
- C語言之高階資料講解C語言
- 詭異的”慢查詢“
- JavaScript 詭異的0.01JavaScript
- 一個詭異的 Pulsar InterruptedException 異常Exception
- C語言字串C語言字串
- 字串(C語言)字串C語言
- 讓賈伯斯立足肩上的C語言之父C語言
- iOS開發系列--C語言之預處理iOSC語言
- 【精】C語言之變數儲存型別C語言變數型別
- iOS開發系列--C語言之構造型別iOSC語言型別
- Java之父評價C語言之父:C語言撐起了一切JavaC語言
- 詭異!React stopPropagation失靈React
- 【PL/SQL開發】-----詭異啊SQL
- C語言 - 字串拼接C語言字串
- iOS開發系列--C語言之基礎知識iOSC語言
- Go語言之methodGo
- Go語言之介面Go