遇到了數據存儲的大端和小端問題,這你妹的看的一頭霧水,發現我基本知識嚴重匱乏啊,先了解C++各數據類型在自己機子上占多少字節吧,以及這些數據類型所占字節大小與神馬有關。各種查資料然后寫代碼檢驗,小結於本文中,給自己補補基礎知識。
先來列一下C++的數據類型:
整型:int,long。這兩個還分signed(有符號)和unsigned(無符號)的,當然有符號和無符號所占字節大小是一樣的,就不管他了。
布爾型:bool
字符型:char,wchar_t
浮點型:float,double
這只能上代碼驗證了,貌似機子不同數據類型所占大小也不同,太威武了,我就檢查下我這個32位windows系統電腦吧。我用的IDE是Code::Blocks,發現挺好用的,主要是工程文件小,不像vs2010建個工程就大得很,哥這小硬盤吃不消啊(題外話)。
先看整型的吧,代碼如下:
#include <iostream> using namespace std; int main() { int a; long b; int Byteof_int=sizeof(a); int Byteof_long=sizeof(b); cout << "int:" <<Byteof_int<<endl; cout << "long:" <<Byteof_long<<endl; return 0; }
結果顯示:
int:4
long:4
int和long都是占4個字節(即32位)。
其他數據類型驗證吧上面代碼數據類型替換下就是了,得出下面的結果:
bool:1
char:1
wchar_t:2
float:4
double:8
特別要注意的時,對於指針類型,都占4個字節,因為指針指向的是一個地址,32位操作系統就是4字節。當然如果是64位操作系統那就是8字節了。
此外,int這個類型占操作系統一個內存單元大小。早先16位操作系統一個內存單元是64位,所以是2個字節;32位系統一個內存單元是是32位,所以是4字節;64位操作系統一個內存單元是16位,故占8個字節。
因為用到MFC編程,mfc里還有很多數據類型啊,看看吧(這只是一部分,還有很多用typedef和宏定義的類型)。
BOOL:int型,Boolean值(TRUE or FALSE)
BSTR:32-bit字符指針
BYTE:8-bit整數,無正負號
COLORREF:32-bit數值,代表一個顏色值
DWORD:32-bit整數,無正負號
LONG:32-bit整數,有正負號
LPARAM:32-bit數值,作為窗口函數或callback函數的一個參數
LPCSTR:32-bit指針,指向一個常數字符串
LPSTR:32-bit指針,指向一個字符串
LPCTSTR:32-bit指針,指向一個常數字符串。此字符串可移植到Unicode
LPTSTR:32-bit指針,指向一個字符串。此字符串可移植到Unicode
LPVOID:32-bit指針,指向一個未指定類型的數據
LPRESULT:32-bit數值,作為窗口函數或callback函數的返回值
UINT:Win16中,16-bit無正負號,Win32中,32-bit無正負號
WNDPROC:32-bit
WORD:16-bit整數,無正負號
WPARAM:窗口函數的一個參數,Win16中16bits,Win32中32bits