C++-将浮点数组转换为std::string

C++ - Convert array of floats to std::string

本文关键字:std 转换 string 数组 C++-      更新时间:2023-10-16

我有一个固定长度的浮点数组。现在我想把这个数组转换成一个二进制字符串。

我无法使用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)相同,即数组中的字节数。

更新:正如James所建议的,你可以做得更好,一次完成所有内容:

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 ) );
}

但为什么呢?除了复制,你对这个字符串无能为力它返回到相同类型的数组中。(即使用于该用途,CCD_ 5或CCD_更自然。而且不那么令人困惑。)

看看这个。。。

#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();
}