[英]read float and double from binary data in C++
我需要能夠從C ++中的二進制數據中讀取float或double數據,類似於Python的struct.unpack
函數。 我的問題是,我收到的數據將始終是大端的。 我已經按此處所述處理了整數值,但是逐字節工作不適用於浮點值。 我需要一種在C ++中提取浮點值(32位float
s和64位double
s)的方法,類似於您使用struct.unpack(">f", num)
或struct.unpack(">d", num)
在Python中。
這是我嘗試過的一個例子:
stuct.unpack("d", num) ==> *(double*) str; // if str is a char* containing the data
如果str
是little-endian,那很好,但是如果我是big-endian,那不是,我知道它將一直如此。 問題是我不知道環境的本地字節序,因此我需要始終能夠將二進制數據提取為big-endian。
如果查看鏈接的問題,您會發現這很容易將按位或和移位用於整數值,但是該方法不適用於浮點數。
注意我應該早一點指出,但是我不能使用c ++ 11或Boost以外的任何第三方庫。
為什么逐字節工作不適用於浮點值? 只需照常提取32位整數,然后將其重新解釋為float: float f = *(float*)&i
與64位整數和double相同
void ByteSwap(void * data, int size)
{
char * ptr = (char *) data;
for (int i = 0; i < size/2; ++i)
std::swap(ptr[i], ptr[size-1-i]);
}
bool LittleEndian()
{
int test = 1;
return *((char *)&test) == 1;
}
if (LittleEndian())
ByteSwap(&my_double, sizeof(double));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.