簡體   English   中英

C ++ - 將浮點數轉換為std :: string

[英]C++ - Convert array of floats to std::string

我有一系列固定長度的浮子。 現在我想將該數組轉換為二進制字符串。

我不能使用const char *因為我的字符串將包含空字節。 在這種情況下我如何使用memcpy? 我已經嘗試過reinterpret_cast<string *> ,但這不起作用,因為字符串也是/只存儲指向數據開頭和結尾的指針(如果我錯了,請糾正我)。

我已經構建了一個空字符串:

string s;
s.resize(arr_size);

但是我如何將一個浮點數組復制到該字符串?

基本上,我想將固定浮點數組的內存區域轉儲到字符串。

不要和我一起努力,我還在學習c ++

像這樣:

#include <algorithm>
#include <string>

float data[10]; // populate

std::string s(sizeof data);
char const * p = reinterpret_cast<char const *>(data);

std::copy(p, p + sizeof data, &s[0]);

請注意, sizeof data10 * sizeof(float) ,即數組中的字節數。

更新:正如詹姆斯所建議的那樣,你可以做得更好並一次性寫出來:

char const * p = reinterpret_cast<char const *>(data);
std::string s(p, p + sizeof data);  // beginning + length constructor

甚至:

#include <iterator>

std::string s(reinterpret_cast<char const *>(std::begin(data)),  // begin + end
              reinterpret_cast<char const *>(std::end(data)));   // constructor

將數組的所有字節都轉換為字符串很簡單:

std::string
bitwiseDump( float const* begin, float const* end )
{
    return std::string( reinterpret_cast<char const*>( begin ),
                        reinterpret_cast<char const*>( end ) );
}

但為什么? 除了將其復制回相同類型的數組之外,您無法對該字符串執行任何操作。 (甚至對於那種用法, std::vector<char>std::vector<unsigned char>會更自然。而且不那么混淆。)

看看這個...

#include <iostream>
#include <array>
#include <string>

int main()
{
    std::string floatString;
    std::array<float, 5> data = {1.1f, 2.2f, 3.3f, 4.4f, 5.5f};

    for (auto& element : data)
        floatString.append(std::to_string(element));

    std::cout << floatString;
    std::cin.get();
}

暫無
暫無

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

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