将浮点数向量转换为十六进制/二进制字符串
Converting vector of floats to hex/binary string
基于这个关于编码/解码到基数 64 的答案,以及这个关于从浮点数转换为字节向量并返回的答案,我试图将浮点向量转换为十六进制或二进制字符串。
这是我的代码:
vector<float> floats = ...;
const unsigned char* bytes = reinterpret_cast<const unsigned char*>(&floats[0]);
std::vector<unsigned char> byteVec(bytes, bytes + sizeof(float) * floats.size());
std::cout<<byteVec.size()<<std::endl;
std::string dat = base64_encode(&byteVec[0], byteVec.size());
std::vector<unsigned char> decodedData = base64_decode(dat);
std::cout<<decodedData.size()<<std::endl;
unsigned char* bytesN = &(decodedData[0]); // point to beginning of memory
float* floatArray = reinterpret_cast<float*>(bytesN);
std::vector<float> floatVec(floatArray, floatArray + sizeof(unsigned char) * decodedData.size());
std::cout<<floatVec.size()<<std::endl;
原始向量 floats 是 262,144 个浮点数,两个 cout 语句都打印1048576,然后程序段错误。我做错了什么?
另外,有没有更好或更快的方法来实现这一目标?我想使用 xml/gsoap 发送字符串,所以如果 gsoap 有一个自动执行此操作的功能,它会让我的生活轻松得多。
一个主要问题是:
std::vector<float> floatVec(floatArray, floatArray + sizeof(unsigned char) * decodedData.size());
这里你说元素的数量是decodedData.size()
,这是1048576
.但这是错误的,因为它应该只是其中的四分之一(因为decodedData.size()
是以字节为单位的大小,而不是float
元素的数量(。这当然会导致超出decodedData
范围,从而导致未定义的行为。
您需要将decodedData.size()
的大小除以sizeof(float)
:
std::vector<float> floatVec(floatArray, floatArray + decodedData.size() / sizeof(float));
相关文章:
- 查找"n"二进制字符串中最长公共子字符串的长度
- 如何在C ++中将二进制字符串128位转换为十进制字符串?
- 如何排列二进制字符串以最小化它们之间的距离
- 将二进制字符串/文件内容从 c++ 传递到节点 js
- C++ 将二进制字符串转换为整数或比较 2 个字符串以查找差异数
- 将大型二进制字符串写入二进制文件
- 将浮点数向量转换为十六进制/二进制字符串
- 我如何在二进制字符串中解开KTH集位
- 在 c++ 中将负 int 转换为二进制字符串
- 将二进制字符串转换为十进制
- 在二进制字符串的数字之间留出空间
- 将整数转换为二进制字符串
- 如何将二进制字符串转换为 ASCII 字符串
- C ++检查字符串是否包含字符以及如何将二进制字符串转换为整数
- 在 C/C++ 中将非常大的 int(写为字符串)转换为二进制字符串
- 如何将二进制字符串转换为整数字符串
- 将二进制字符串转换为整数字符串c++
- 构建一个二进制字符串c++
- 这是从二进制字符串转换为十进制值的无效方法吗?
- 将二进制字符串写入二进制文件