如何将2 uint的结构转换为double
发布时间:2020-12-14 01:48:06 所属栏目:Windows 来源:网络整理
导读:我有一个如下结构: struct pts_t { uint32_t lsb; uint32_t msb;}; 我想把它变成双重的.直接写是否安全: pts_t t; double timestamp = t; 并且更复杂,如果struct类型是C dll API的一部分,没有“packing”属性(对于所有编译器)在这种情况下我必须复制pts_t
我有一个如下结构:
struct pts_t { uint32_t lsb; uint32_t msb; }; 我想把它变成双重的.直接写是否安全: pts_t t; double timestamp = t; 并且更复杂,如果struct类型是C dll API的一部分,没有“packing”属性(对于所有编译器)在这种情况下我必须复制pts_t *通过API复制到我创建的pts_t实例来控制结构包装? void f(pts_t* t) { pts_t myt; myt.lsb = t->lsb; myt.msb = t->msb; double timestamp = *(double*)(&myt.lsb); }
最初的想法是写下面的内容:
double timestamp = *( ( double * ) &( t.lsb ) ); 要逐步执行此操作(假设您处于32位环境中): >您正在获取标识符t.lsb的地址,因为您需要找到结构中第一个字节的内存地址.请注意,您也可以选择. 备注: >您需要考虑小/大字节序. 现在,备注中的三点需要担心.在多个平台上移植此代码时,这将成为一个巨大的痛苦.如下所述,使用C联合是一种更好,更正确的便携式解决方案. C联盟将如下编写: double timestamp = ( union { double d; struct pts_t pts; } ) { t } .d; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
推荐文章
站长推荐
热点阅读