我有一系列固定长度的花车。现在我想将该数组转换为二进制字符串。
我无法使用const char *
,因为我的字符串将包含空字节。在这种情况下我如何使用memcpy?我已经尝试了reinterpret_cast<string *>
,但是这不起作用,因为字符串也是/只存储指向数据开头和结尾的指针(如果我错了,请纠正我)。
我已经构建了一个空字符串:
string s;
s.resize(arr_size);
但是如何将一个浮点数组复制到该字符串?
基本上,我想将固定浮点数组的内存区域转储为字符串。
不要和我一起努力,我还在学习c ++
答案 0 :(得分:6)
像这样:
#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
答案 1 :(得分: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>
会是{{1}}
更自然。而且不那么混淆。)
答案 2 :(得分:0)
看看这个......
#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();
}