在 C 中是否可以以二进制形式表示一个定点数,以便可以在不使用浮点数的情况下传输它?
我知道如何将浮点数或双精度数转换为所需的定点表示,但是当它应该在没有浮点的情况下完成时我被卡住了。问题是我必须开发的系统有这个限制。
我的想法是创建一个包含完整表示和可处理整数和小数部分的结构。在仅使用接收到的二进制表示或整数和小数值创建结构之后,应该有一个进行转换的函数。
更新:
我的问题似乎不够精确,所以我将添加一些细节。
在我的代码中,我必须以某个定点表示形式创建和接收数字。正如下面的答案所描述的,这只不过是一个指向位序列的指针。我的问题是我必须在发送时创建这个位序列,或者在接收信息时对其进行解释。
这种转换是我忽略签名的问题,当您可以使用浮点数进行转换时,这很容易做到(代码未经测试,但必须像这样工作):
float sourceValue = 12.223445;
int intPart = 0;
float fractPart = 0.0;
//integer part is easy, just cast it
intPart = (int)sourceValue;
//the fractinoal part is the rest
fractPart = sourceValue - intPart;
//multipling the fract part by the precision of the fixed point number (Q9.25)
//gets us the fractional part in the desired representation
u_int64_t factor = 1;
factor = factor << 25;
u_int64_t fractPart = fractPart * factor;
其余的可以通过一些移位和使用逻辑位运算符来完成。
但是我怎么能在中间没有浮动的情况下做到这一点,从这样的开始:
int intPart = 12;
int fractPart = 223445;
甚至可能吗?如前所述,我有点卡在这里。
谢谢你的帮助!