gpt4 book ai didi

c++: 将 vector 转换为 double

转载 作者:搜寻专家 更新时间:2023-10-31 00:20:14 25 4
gpt4 key购买 nike

我正在使用 vector<char>通过套接字发送和接收数据。在这个 vector 中,我存储了不同类型的数据。无符号整数和 double 。为了解码来自 vector 的数据,我使用 copy功能。

vector<char> myVector = ... smth;
double value = 0.0;
copy(myVector.begin(), myVector.begin() + sizeof(value), &value);

它可以毫无问题地处理 Integer。但是……

我的问题是,编译给出了一个错误 "free(): invalid pointer: 0x00000000006d0e30" .我查了一下,问题出在 double 值上,而不是 vector 上。我查看了 double 值的地址( 0x6d0e38 )。为什么程序会尝试向后访问指针?如果你能说我做错了什么,我会很高兴。这是解码消息的好方法吗?

非常感谢。

最佳答案

It works with Integer without problem. But...

它肯定对整数有效。至少对于 sizeof(int) > 1 的整数不是这样!因为它不会只写入一个整数,而是将 myVector 中的字节分布在 sizeof(T) 整数上,从而覆盖随机内存。 (查看 nightcracker 的回答)

这种复制请使用memcpy:

vector<char> myVector = ... smth;
double value = 0.0;
assert(myVector.size() == sizeof(double));
memcpy(&value, &myVector[0], std::min(myVector.size(), sizeof(double)));
// as an alternative to the assert + std::min() above, you could also throw
// an exception if myVector.size() == sizeof(double) does not hold.
// (that's what I'd do if the size should always match exactly)

memcpy 正是为这种事情(复制原始内存)而制作的,我认为没有理由在这里使用任何其他东西。使用 std::copy 并不能使其成为更好的 C++,尤其是当您未正确执行时。 std::copy 用于复制对象,而不是原始内存。

关于c++: 将 vector<char> 转换为 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6417438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com