C++有浮子的Memcpy
Memcpy with floats in C++
我对看似非常简单的代码有问题,但它确实做了我期望它做的事情:
法典:
char b[sizeof(float)];
float a = 1.5f;
memcpy(b, &a, sizeof(float));
printf("%fn", b[0]);
输出:
62827075002794546937726511559700164562271693617156259118887055013962964939146547
22493354730179062365918845182857228200743453702107162763566167344423902681816648
14169764096333089859051972349071751428406066879715295195780847944297207011246001
33742258486014791122944.000000
然而,当我这样做时,它有效:
char b[sizeof(int)];
int a = 3;
memcpy(b, &a, sizeof(int));
printf("%in", b[0]);
输出:
3
为什么会这样?是因为字节序还是什么?
您的代码具有未定义的行为。表达式 b[0]
是一个char
(提升为 int
),格式说明符%f
需要double
。
(对于您看到的输出,可以有多种解释。想到的最紧迫的问题是double
比平台上的int
宽,并且会读取垃圾内存。如果你想要一个稍微更可预测的实验,请尝试传递static_cast<uint64_t>(b[0])
作为参数。
相关文章:
- vector<vector<double>> to mxArray using memcpy
- 使用 memcpy() 复制到 std::chrono::milliseconds 会给出错误 -Werror=clas
- 从向量到空指针的 memcpy(反之亦然)不起作用
- 如何使用多次 memcpy 转换回 std::vector<unsigned char>?
- Memcpy C++替代方案
- Qt:memcpy失败了.如何复制?
- 在什么条件下使用 std::memcpy 在对象之间复制是安全的?
- 为什么 memcpy() 和其他类似的函数使用汇编?
- 为什么我可以使用 memcpy 将一个对象变量复制到另一个对象变量
- 使用 memcpy 将矢量数据复制到 wstring 的正确方法
- 尝试通过memcpy复制大尺寸浮点向量时的分割错误
- 使用 memcpy 函数C++复制字符数组
- std::memcpy vs std::copy_n for legacy c structs
- 对于单个数据 WORD 的 memcpy 和赋值语句有什么区别?
- 在 mmap'ed 区域上使用 memcpy 崩溃,for 循环不会
- 将结构 std::memcpy 转换为具有足够容量的 std::vector 是未定义的行为<char>吗?
- 由于指针算法错误,代码在 memcpy 中崩溃
- C++中的保序memcpy
- C++ - 程序接收信号SIGSEGV,分段错误.In msvcrt!memcpy () (C:\Windows\S
- memcpy 是将浮子打包到 uint32 中的标准方法吗?