Friday, October 07, 2005

union กะที่ใช้ที่น่าสนใจ

union ในภาษา C/C++ เป็นส่วนที่มีที่ใช้ไม่ค่อยมากมายนัก วันนี้ผมจะมาแสดงที่ใช้งานนึงที่น่าสนใจของ union

ก่อนอื่นก็ขอพูดถีึง union ก่อนนะครับ union เป็น type นึงของ data ก็ตามชื่อคือ มัน union ใช้พื้นที่จัดเก็บร่วมกันใน union type นั้น ๆ ขนาดของมันก็จะมีขนาดเท่ากับ max ของขนาดที่อยู่ใน union นั้น ๆ แต่ถ้ามีขนาดเท่ากัน เราสามารถนำมันไปใช้งานได้ตามตัวอย่างข้างล่างนี้คือ เรารู้ว่า data type นึงของเรามีขนาดเท่าไหร่ เราก็ประกาศ char array ให้มีขนาดเท่ากันเพื่อที่มันจะ share พื้นที่กันได้เต็มที ในตัวอย่างแสดงให้เห็นว่า เราสามารถ แสดง int ออกมาเป็น char array ได้โดยไม่ต้องเขียนอะไรเพิ่มมากเลยเพียงแค่ใช้ union นอกจากนี้เรายังสามารถ demonstrate endianess ของแต่ละ cpu architecture ด้วย

#include <iostream>
#include <iomanip>

using namespace std;
union testunion
{
int i;
char c[4];
};

int main()
{
union testunion a;
a.i = 0x01020304;

cout << setw(8) << hex << setfill('0') << a.i << " : "
<< setw(2) << setfill('0') << hex << (int)a.c[0]
<< setw(2) << setfill('0') << hex << (int)a.c[1]
<< setw(2) << setfill('0') << hex << (int)a.c[2]
<< setw(2) << setfill('0') << hex << (int)a.c[3] << endl;
return 0;
}

Windows Intel (of course)
01020304 : 04030201

Solaris Sparc
01020304 : 01020304

Solaris Intel
01020304 : 04030201


หวังว่า ตัวอย่างนี้จะทำให้เข้าใจการ concept และการใช้งานของ union ได้มากขึ้น

0 Comments:

Post a Comment

<< Home