5

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

我不能使用const char *,因为我的字符串将包含空字节。在这种情况下,我将如何使用 memcpy?我已经尝试过 a reinterpret_cast<string *>,但这不起作用,因为该字符串还/仅存储指向数据开头和结尾的指针(如果我错了,请纠正我)。

我已经在构造一个空字符串:

string s;
s.resize(arr_size);

但是我如何将一组浮点数复制到该字符串?

基本上,我想将固定浮点数组的内存区域转储为字符串。

别跟我硬,我还在学c++

4

3 回答 3

7

像这样:

#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 data与 相同10 * 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
于 2013-07-31T08:09:15.700 回答
4

将数组的所有字节放入字符串很容易:

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>会更自然。而且更少混淆。)

于 2013-07-31T08:16:48.387 回答
1

看看这个...

#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();
}
于 2013-07-31T08:53:31.693 回答