c - 从 unsigned int[2] 加倍?

标签 c

我有一个 64 位数字,写成两个 32 位未签名的整数:unsigned int[2]unsigned int[0] 是 MSB,unsigned int[1] 是 LSB。我如何将它转换为 double

double d_from_u2(unsigned int*);

最佳答案

memcpy 它以正确的顺序从您的源数组到 double 对象。例如。如果你想交换 unsigned 部分

unsigned src[2] = { ... };
double dst;
assert(sizeof dst == sizeof src);

memcpy(&dst, &src[1], sizeof(unsigned));
memcpy((unsigned char *) &dst + sizeof(unsigned), &src[0], sizeof(unsigned));

当然,您始终可以将源对象和目标对象重新解释为 unsigned char 数组,并以您希望的任何顺序逐字节复制它们

unsigned src[2] = { ... };
double dst;

unsigned char *src_bytes = (unsigned char *) src;
unsigned char *dst_bytes = (unsigned char *) &dst;

assert(sizeof dst == 8 && sizeof src == 8);

dst_bytes[0] = src_bytes[7];
dst_bytes[1] = src_bytes[6];
...
dst_bytes[7] = src_bytes[0];

(第二个示例并不等同于第一个示例。)

关于c - 从 unsigned int[2] 加倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42116327/

相关文章:

c - 插入排序不起作用

c - 按位程序的解释

iphone - 从相机输入复制像素

c - 当我尝试对 2 个数组使用 scanf 时出现错误

c - strlen 函数给出错误的值

c++ - 动态设置 for 循环的初始化、条件和 in/decrementation

c - 从哪里开始 ARM Cortex-A 编程

c - 取消引用指向不完整类型的指针 - 指向 char* 的指针出错

c - Ansi C 运行时性能全局变量与局部变量

c - gcc `__thread` 是如何工作的?