gpt4 book ai didi

c - 重新排序 double 类型的数据

转载 作者:太空宇宙 更新时间:2023-11-03 23:58:36 25 4
gpt4 key购买 nike

我正在尝试在 Windows 的 C 中创建一个函数,该函数的输入为 double (8 字节)并返回另一个 double 但重新排列,即输入为 B7 ... B0,输出为 B0 ... B7.在处理 int 和 double 数据时,我的编译器给我一个错误。

我考虑过获取输入值并使用高级别字节 (0xFF) 制作掩码,从而将构成双输入值的 8 个字节分开,然后按照输入顺序以外的顺序将它们连接起来,得到我的双输出按我的要求订购,但它不起作用。

代码如下:

double ordena_lineal(double lineal)
{

// Recibo B7...B0 y devuelvo B0...B7
uint8_t B0,B1,B2,B3,B4,B5,B6,B7;
double lineal_final;

B0 = lineal&&0xFF;
B1 = (lineal>>8)&&0xFF;
B2 = (lineal>>8*2)&&0xFF;
B3 = (lineal>>8*3)&&0xFF;
B4 = (lineal>>8*4)&&0xFF;
B5 = (lineal>>8*5)&&0xFF;
B6 = (lineal>>8*6)&&0xFF;
B7 = (lineal>>8*7)&&0xFF;

lineal_final = (B7 | (B6 << 8) | (B5 << 8*2) | (B4 << 8*3) | (B3 << 8*4) | (B2 << 8*5) | (B1 << 8*6) | (B0 << 8*7))
return lineal_final;
}

最佳答案

按位运算符在浮点类型上使用是非法的。此外,当您将移位后的字节分配回 lineal_final 时,您分配的是该表达式的,而不是它的表示

您需要使用union 来执行您想要的操作。

union double_bytes {
double d;
uint8_t b[sizeof(double)];
};

double ordena_lineal(double lineal)
{
union double_bytes src, dst;
src.d = lineal;

for (int i = 0; i < sizeof(double); i++) {
dst.b[sizeof(double) - 1 - i] = src.b[i];
}

return dst.d;
}

这允许您访问 double 的对象表示并以符合标准的方式执行别名。

关于c - 重新排序 double 类型的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54466080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com