aco*_*ier 2 c c++ types pointers
我有一个双.
double d
Run Code Online (Sandbox Code Playgroud)
不幸的是,它实际上包含一个浮点数,最后4个字节.(原因很复杂,无法控制).所以内存看起来像这样.
0x0000000012345678
Run Code Online (Sandbox Code Playgroud)
我需要提取最后4个字节并将它们存储在浮点数中.我尝试了一些不同的东西,但到目前为止我的最好结果是
float f = *(((float*) &d)) + 1);
Run Code Online (Sandbox Code Playgroud)
获取d的双指针,转换为浮点指针,添加4个字节,取消引用.
有没有更好的办法?
肯定有一种更便携的方式:
float get(double d)
{
float result;
unsigned char * dst = reinterpret_cast<unsigned char *>(&result);
unsigned char const * src = reinterpret_cast<unsigned char const *>(&d);
static_assert(sizeof(float) == 4);
static_assert(sizeof(double) == 8);
dst[0] = src[4];
dst[1] = src[5];
dst[2] = src[6];
dst[3] = src[7];
// or use std::memcpy or std::copy
return result;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |