簡體   English   中英

從C ++中的二進制數據讀取float和double

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM