簡體   English   中英

如何將 float 和 double 類型的值轉換為二進制格式並推入 uint8_t 類型的向量?

[英]how to convert values of type float and double into binary format and push into vector of type uint8_t?

我想知道如何將 float 和 double 的值轉換為二進制格式並推入 uint8_t 類型的向量

Eg : float x  = 23.22;
     double z = 2.32232;

並在序列化時將它們存儲到向量中

矢量<uint8_t> 數據。

並在反序列化時轉換回原始值。

有沒有辦法做到這一點?

如果您只需要將它們推入向量並彈出它們(如堆棧),您可以這樣做:

void push( std::vector<uint8_t> &v, float f )
{
   auto offs = v.size();
   v.resize( offs + sizeof( float ) );
   std::memcpy( v.data() + offs, &float, sizeof( float ) );
}

float popFloat( std::vector<uint8_t> &v )
{
    float f = 0;
    if( v.size() >= sizeof( float ) ) {
        auto offs = v.size() - sizeof( float );
        std::memcpy( &f, v.data() + offs, sizeof( float ) );
        v.resize( offs );
    }
    return f;
}

請注意,這會將它們以不可移植的格式存儲,但應該適用於將它們存儲/讀取到/從同一硬件上的文件中讀取。

您可以將這兩個函數重寫為模板,它將適用於所有整數和浮點類型( short int long double等)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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