利用union進行變數間的換算

  • 1184
  • 0
  • c++
  • 2011-07-23

Convert your variable by union

目前我好像沒有看過有人這樣用

這是有一次我寫程式的時候突然想到的

 

 

union的用途是讓多個變數或是物件共用同一塊記憶體

然後所占用的空間以最大的為主

我們可以利用這個特性來做一些事情

就是進行單位的換算

 


	#include "stdafx.h"

const int INTEGER_LEN = 4;

class ClassA
{
public:    
    
    union
    {
        int                iInteger;
        unsigned char    ucByte[INTEGER_LEN];
        char            cChar[INTEGER_LEN];
    };
};


int _tmain(int argc, _TCHAR* argv[])
{
    ClassA mClassA_;    


    // 隨便給個值吧
    mClassA_.iInteger = 99563;
    
    for(int i=0; i<INTEGER_LEN; i++)
        ::printf("Byte%d = %d\n", i, mClassA_.ucByte[i]);

    
    ::printf("\n");


    for(int i=0; i<INTEGER_LEN; i++)
        ::printf("char%d = %d\n", i, mClassA_.cChar[i]);

    ::printf("\n");


    // 也可以倒過來用
    ::memcpy(mClassA_.cChar, "ABCD", sizeof(mClassA_.cChar));

    for(int i=0; i<INTEGER_LEN; i++)
        ::printf("Byte%d = %d\n", i, mClassA_.ucByte[i]);

    ::printf("\n");
    ::printf("integer = %d\n", mClassA_.iInteger);
    ::printf("\n");


     // 不要理我, 我只是讓程式暫停的迴圈=..=a    
    char cPause;    
    do    
    {        
        cPause = getchar();        
        if(cPause == EOF)            
            break;    
    } while(cPause != '\n');


    return 0;
}
 
執行的結果
image