遇到了資料存放區的大端和小端問題,這你妹的看的一頭霧水,發現我基本知識嚴重匱乏啊,先瞭解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