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語言
- 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語言字串
- 詭異的”慢查詢“
- 一個詭異的 Pulsar InterruptedException 異常Exception
- C語言 - 字串拼接C語言字串
- 【C】 30_C語言中的字串C語言字串
- C語言字串例題C語言字串
- 怎樣解決程式語言之間的差異性問題?
- Go語言之methodGo
- Go語言之ContextGoContext
- Go語言之介面Go
- x86彙編反編譯到c語言之——(2)if語句編譯C語言
- python 詭異問題求助各位大哥Python
- Go 語言之父帶你重新認識字串、位元組、rune 和字元Go字串字元
- go語言之反射-------ReflectionGo反射
- Go語言之 Struct TagGoStruct
- C語言之int *f()、int(*f)()、int *a[]、int (*a)[] 區別小記C語言
- [20190116]詭異的問題2.txt
- 介面詭異的404問題記錄
- API 路由中介軟體的詭異API路由
- C語言知識彙總 | 51-C語言字串指標(指向字串的指標)C語言字串指標
- C語言進階[2]:字串常量C語言字串
- C語言sizeof()變數、字元、字串C語言變數字元字串
- 深度解密Go語言之Slice解密Go