注:本文適合初學者閱讀。
很多時候,需要將一種數據類型的數據,直接用另一種數據類型表現出來。例如,有一個包含四個字符的字符串“1234“,為了某種需要,要查看在包含這四個字符的內存中,如果是整型該是什麼數據(或許是其它類型)。為了說明方便,先將用戶所需的整型值給列出來為0x34333231(因在內存中將整數的高位放在後面,低位放在前面,所以內存中的0x31323334用十六進制整數值就是0x34333231。這一點是劉雲兄指出後更正的)。其實本題的實質是內存的直接拷貝。
1. 通常最容易想到的方法就是內存拷貝。如:
char c[]=”1234”;
int a=0;
memcpy(&a,c,4);
cout<
2. 我們還常會想到強制轉換,我們可以做一下實驗:
char c[]=”1234”;
int a=0;
a=(int)c;
cout< 上機運行,發現結果並非所需的數據,仔細查看一下就容易找出得到的a的數值就是變量c的地址了。可見這種轉換方法行不通。
3. 直接強制轉換不行,我們可以利用指針的強大功能,將其直接轉換成所需要的類型。如下:
char c[]=”1234”;
int a=*(int *)c;
cout< 由此可見,與前兩種方法相比有明顯的優點。
4. 利用引用
引用是C++用途很廣的方法,本例中如果使用引用,也會產生意想不到的效果,如下:
char c[]=“1234”;
int a=(int &)c;
cout< 初看到這種使用方法,讀者可能感到驚呀,怎麼這樣也行啊?如果讀者對此不理解,請繼續看分析。
在此例中,c[]是字符數組,單個c就是字符數組的地址。在我們定義引用時就是通過初使化賦地址值來使用的,如:
int b=0x34333231;
int &c=b;
cout< 這時候c和b雖然不是一個變量,但其地址是同一個,就像一個人兩個名字,上句輸出的結果是0x34333231;而不是c在內存中的地址。
再看方法4,將其改為如下方式。
char c[]=“1234”;
int &b=(int &)c;
int a=b;
cout< 方法4中直接用int a=(int &)c;相當於創建了一個臨時的引用,接著又將引用的值傳給了a,所以此方法能順利的運行。
本文以整型和字符串型做為事例,所述方法可用於多種類型的處理,希望讀者在編程中有所啟發。
由於本人水平有限,文中難免有誤,請讀者批評指正。
本文因有誤,已於2006.3.9做更正。
发表于 2006-03-08 14:38 水石 阅读(743)
--------------------next---------------------
阅读(316) | 评论(0) | 转发(0) |