大佬教程收集整理的这篇文章主要介绍了如何将2 uint的结构转换为double,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
struct pts_t { uint32_t lsb; uint32_t msb; };@H_696_16@我想把它变成双重的.直接写是否安全:
pts_t t; double timestamp = t;@H_696_16@并且更复杂,如果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); }@H_696_16@
double timestamp = *( ( double * ) &( t.lsb ) );@H_696_16@要逐步执行此操作(假设您处于32位环境中):
>您正在获取标识符t.lsb的地址,因为您需要找到结构中第一个字节的内存地址.请注意,您也可以选择.
>然后,您将该内存地址转换为指向double(8字节)的指针.
>您最后解除引用该指针并将所有8个字节存储在标识符时间戳使用的8字节内存块中.备注:
>您需要考虑小/大字节序.
>您假设结构和双精度都正确对齐(如下所述).
>这是不可移植的,你假设一个double是8个字节.现在,备注中的三点需要担心.在多个平台上移植此代码时,这将成为一个巨大的痛苦.如下所述,使用C联合是一种更好,更正确的便携式解决方案.
C联盟将如下编写:
double timestamp = ( union { double d; struct pts_t pts; } ) { t } .d;@H_696_16@
以上是大佬教程为你收集整理的如何将2 uint的结构转换为double全部内容,希望文章能够帮你解决如何将2 uint的结构转换为double所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。