C中不带浮点数的不动点数

C中不带浮点数的不动点数,c,numbers,fixed-point,C,Numbers,Fixed Point,在C语言中,有没有可能以二进制形式表示一个固定的点号,这样它就可以在不使用浮点数的情况下传输 我知道如何将浮点或double转换为所需的定点表示,但在没有浮点的情况下进行转换时,我被卡住了。问题是我必须开发的系统有这个限制 我的想法是创建一个包含完整表示和可处理的整数和小数部分的结构。在创建结构后,或者只使用接收到的二进制表示,或者整数值和分数数值,应该有一个函数进行转换 更新: 我的问题似乎不够精确,所以我要补充一些细节 在我的代码中,我必须以特定的定点表示创建和接收数字。正如下面的答案所描述

在C语言中,有没有可能以二进制形式表示一个固定的点号,这样它就可以在不使用浮点数的情况下传输

我知道如何将浮点或double转换为所需的定点表示,但在没有浮点的情况下进行转换时,我被卡住了。问题是我必须开发的系统有这个限制

我的想法是创建一个包含完整表示和可处理的整数和小数部分的结构。在创建结构后,或者只使用接收到的二进制表示,或者整数值和分数数值,应该有一个函数进行转换

更新:

我的问题似乎不够精确,所以我要补充一些细节

在我的代码中,我必须以特定的定点表示创建和接收数字。正如下面的答案所描述的,这只是一个指向位序列的指针。我的问题是,我必须在发送时创建这个位序列,或者在接收信息时解释它

这种转换是我的问题,忽略符号性。当您可以使用浮点进行转换时,这是一件非常简单的事情(代码未经测试,但必须按如下方式工作):

有可能吗?如前所述,我被困在这里了


谢谢你的帮助

一切都归结为位,可以是整数、浮点等。您所需要的只是内存基址和特定内存的大小。比如说,

float src = 0.5;
float dest;
char bytes[sizeof(src)];    

memcpy(bytes, &num, sizeof(src));
dest = *((float *)bytes);
应该给你dest等于src


希望这有帮助。

我不知道你到底在干什么,但定点数字可以被视为一个整数,并应用一个常数因子

例如,如果要以16位表示间隔[0;1]内的数字,只需将其与65536相乘即可将其映射到范围[0;65536]


也就是说,这完全取决于整数值的外观以及它们的表示方式。几乎在任何情况下,您都可以对其应用乘法或除法,然后就完成了。

至少有一个库可以实现这一点,至少您可以看到它是如何完成的:定点表示不是浮点,所以我不知道“我不明白问题是什么。你想把什么转化成什么?@ph他真的没有一个答案对你有帮助,因为你还没有一个答案?”?
int intPart = 12;
int fractPart = 223445;
float src = 0.5;
float dest;
char bytes[sizeof(src)];    

memcpy(bytes, &num, sizeof(src));
dest = *((float *)bytes);