0
基于this关于编码/解码为基础64的答案和this关于从浮点数转换为字节向量并返回的答案,我尝试将浮点向量转换为十六进制或二进制串。将浮点数向量转换为十六进制/二进制字符串
这是我的代码:
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;
原来的载体,花车,为262,144辆彩车,两者COUT报表打印1048576,然后程序段错误。我究竟做错了什么?
此外,有没有更好或更快的方法来实现这一目标?我想用xml/gsoap发送字符串,所以如果gsoap有一个自动执行此操作的函数,它会让我的生活变得更容易。
'无符号字符* bytesN =(decodedData [0]); float * floatArray = reinterpret_cast(bytesN);' - 未定义重新解释'char'作为另一种类型的块。它违反了别名规则。只有反面是允许的。你应该将字节'memcpy'写入一个实际的,声明的&分配的'floats'数组中,然后读取它。即使这样做很脆弱,因为您正在对实现如何表示“浮动”以及是否与编码它们的编码相匹配做出了假设。另外,还可能有其他问题。很难阅读这个坚实的代码块。一些换行和评论会很好。 –
所以你有一个'float'元素的向量。对于每个你想要将它编码为一个新的向量中的字符串的元素?然后将新的矢量解码为“float”的第二个矢量?就像两次调用['std :: transform'](http://en.cppreference.com/w/cpp/algorithm/transform)一样简单。 –
@Someprogrammerdude好吧,我希望整个向量是一个十六进制字符串,而不是其他字符串的新向量。转化仍然会为此工作吗? – anc