小端存儲輸出後
發布時間: 2022-07-27 09:15:23
1. 大端存儲和小端存儲的區別
大端模式就是低位存放在高地址上。高位存放在地址上。
小端模式就是地位存放在低地址上。高位存放在高地址上。
例如,16bit寬的數0x1234在Little-endian模式CPU內存中的存放方式(假設從地址0x4000開始存放)為:
內存地址 0x4000 0x4001
存放內容 0x34 0x12
而在Big-endian模式CPU內存中的存放方式則為:
內存地址 0x4000 0x4001
存放內容 0x12 0x34
2. C語言問題求解
這個問題涉及到內存分布,在這里我假設你的電腦採用小端格式存儲數據(小端格式存儲不了解的話先網路下)。
1、首先可以列出第一個語句 struct data d = {"", -3, 769} 賦值後的內存分布,分布如下:
00 00 00 00 00 00 00 00 fd ff ff ff 01 03 00 00
從內存分布可知前8個0就是d.str,0xfffffffd代表d.arr[0] =-3,0x00000301代表d.arr[1]=769
註:默認從左往右的地址為從低到高,符合小端格式的設定
2、執行scanf("%s", d.str);//這里輸入1234abcdef 語句後的內存分布如下:
31 32 33 34 61 62 63 64 65 66 00 ff 01 03 00 00
由於"1234abcdef"的長度10超過了a.str的大小8,那麼後面的2位元組就會被覆蓋,從內存上看,從左往右的10個位元組分別對應於"1234abcdef"的ascii碼;那麼為什麼0x66('f')後面的位元組為0了呢?那是因為字元串以'