2011-11-09 53 views
4

我試圖帶兩個雙打(GPS座標)並通過ZigBee API將它們發送給另一個ZigBee接收器單元,但我不知道如何將雙打分解成字節數組,然後將它們重新組合成它們的原始表格一旦被轉移,通過ZigBee API轉換雙字節數組和字節數組之間的轉換?

基本上,我需要將每個double轉換爲8個原始字節的數組,然後取出原始數據並重新構建double。

任何想法?

回答

4

你在做什麼叫做type punning

使用工會:

union { 
    double d[2]; 
    char b[sizeof(double) * 2]; 
}; 

或者使用reinterpret_cast

char* b = reinterpret_cast<char*>(d); 
+0

我做了一些關於工會的更多閱讀,並讓它以這種方式工作。謝謝! – lecreeg

1

通常,一個double已經是八個字節。請通過比較sizeof(double)和sizeof(char)來驗證您的操作系統。 C++不聲明字節,通常這意味着焦炭

如果它確實是真的。

double x[2] = { 1.0 , 2.0}; 

    double* pToDouble = &x[0]; 
    char* bytes = reinterpret_cast<char*>(pToDouble); 

現在字節就是你需要發送給ZigBee的

+0

謝謝。非常有幫助 – lecreeg

3

這是一個相當不安全的方式來做到這一點:

double d = 0.123; 
char *byteArray = (char*)&d; 

// we now have our 8 bytes 

double final = *((double*)byteArray); 
std::cout << final; // or whatever 

或者你可以使用一個的reinterpret_cast:

double d = 0.123; 
char* byteArray = reinterpret_cast<char*>(&d); 

// we now have our 8 bytes 

double final = *reinterpret_cast<double*>(byteArray); 
std::cout << final; // or whatever