我想将double
数字转换为字节数组(unsigned char*)
std::vector<unsigned char*> v;
for (int i = 0; i < 5; i++)
{
double a = 3.14+i;
double b = 4.44+i;
v.push_back((unsigned char*)&a);
v.push_back((unsigned char*)&b);
}
for (int i = 0; i < v.size(); i++)
std::cout << *((double*)v.at(i)) << std::endl;
我已经这样做了,但它总是给我最后一组数字。
当前输出:
7.14 8.44 7.14 8.44 7.14 8.44 7.14 8.44 7.14 8.44
它应该是怎样的:
3.14 4.44 4.14 5.44 5.14 6.44 6.14 7.44 7.14 8.44
最佳答案
std::vector<unsigned char*>
是指向 unsigned char
的指针的 vector (列表) .这不是您想要的。
我猜你想要 std::vector<unsigned char>
(这里没有指针)。
对于要添加到列表中的每个数字,您必须向其添加几个(通常为 8 个)字节。为了做到这一点,最简单的方法是:
const unsigned char* ptr = reinterpret_cast<const unsigned char*>(&a);
for (size_t i = 0; i < sizeof(double); ++i)
v.push_back(ptr[i]);
从这样的字节数组中提取一个数字:
for (int i = 0; i < v.size(); i++) {
double number;
memcpy(&number, &v.at(i * sizeof(double)), sizeof(double));
std::cout << number << std::endl;
}
关于c++ double 到字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25164664/