本文從一個經典的 C++ 類型轉換問題切入,深入講解小端/大端模式、強制類型轉換機制及內存佈局原理。
#include <iostream>
void main() {
int i = 0xb62;
char c;
c = i;
std::cout << c << std::endl; // 輸出 'b',為什麼?
}
通過聯合體/指針方式檢測發現:x86 架構採用小端模式——低位字節存放在低地址,高位字節存放在高地址。
| 模式 | 存儲規則 | 口訣 |
|---|---|---|
| 小端 | 高位在後,低位在前 | 低地址存低位 |
| 大端 | 高位在前,低位在後 | 低地址存高位 |
0xb62 十六進制佔 2 字節,char 只有 1 字節,發生截斷。小端模式下低字節 0x62(十進制 98,ASCII 'b')存放在低地址,直接被賦值給 char,故輸出 'b'。
type(expression) 或 (type)expression
int nVar = 0xab65;
char cChar = char(nVar); // 保留低位字節 0x65
int nVar;
double dVar = 3.88;
nVar = dVar; // nVar = 3,dVar 不變
int → double)double → int,int → char)
char (1 Byte) ←────── int (4 Bytes)
低地址端
小端模式下,int → char 直接取低地址字節,無需字節重排,效率高;大端模式則需調整字節順序。
小端模式使強制類型轉換無需調整字節內容,1/2/4 字節類型的低位字節地址一致,轉換效率高。理解字節序對跨平台開發、網絡通信、二進制數據處理至關重要。