我試圖帶兩個雙打(GPS座標)並通過ZigBee API將它們發送給另一個ZigBee接收器單元,但我不知道如何將雙打分解成字節數組,然後將它們重新組合成它們的原始表格一旦被轉移,通過ZigBee API轉換雙字節數組和字節數組之間的轉換?
基本上,我需要將每個double轉換爲8個原始字節的數組,然後取出原始數據並重新構建double。
任何想法?
我試圖帶兩個雙打(GPS座標)並通過ZigBee API將它們發送給另一個ZigBee接收器單元,但我不知道如何將雙打分解成字節數組,然後將它們重新組合成它們的原始表格一旦被轉移,通過ZigBee API轉換雙字節數組和字節數組之間的轉換?
基本上,我需要將每個double轉換爲8個原始字節的數組,然後取出原始數據並重新構建double。
任何想法?
你在做什麼叫做type punning。
使用工會:
union {
double d[2];
char b[sizeof(double) * 2];
};
或者使用reinterpret_cast
:
char* b = reinterpret_cast<char*>(d);
通常,一個double已經是八個字節。請通過比較sizeof(double)和sizeof(char)來驗證您的操作系統。 C++不聲明字節,通常這意味着焦炭
如果它確實是真的。
double x[2] = { 1.0 , 2.0};
double* pToDouble = &x[0];
char* bytes = reinterpret_cast<char*>(pToDouble);
現在字節就是你需要發送給ZigBee的
謝謝。非常有幫助 – lecreeg
這是一個相當不安全的方式來做到這一點:
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
我做了一些關於工會的更多閱讀,並讓它以這種方式工作。謝謝! – lecreeg