请问这道C语言题解答中最后一个数为什么是4?

实际的编程应用中,特别是数据传输通信等场合,需要传输float等类型的数据,而常用的数据传输形式一般为hex格式或字符串格式,通常我们会选用hex格式,更接近计算机的2进制,而这种传输方式就需要将float转换为hex格式了。

在计算机中,float占用4个字节,因此可以考虑将float拆分为4个hex格式的16进制数,完成数据传输后,接收方再将4个hex重组为float即可还原出原来的数据,这有点像数据的编码和解码的意味。

float的计算机中占用4个字节,具体是如何在计算机中存储的可以参考上一篇笔记:C语言打印数据的二进制格式-原理解析与编程实现,上次的int数据打印2进制的函数这里也可以用来测试,只需将参数类型改成float:

现在来测试一个float数据的2进制形式:

查看a的每个字节的地址(16进制)与内容(10进制(+16进制)):

这个输出结果实际上我们也无法直接看出拆分的到底对不对,上次测试int是对的,理论上也适用于float,因为2者都是4字节储存。

我们可以先继续拆分测试,最后重组看看是否可以还原数据。

这里写了测试函数,先将float拆分为4个字节,保存在tbuf[0]~tbuf[3]中,并先打印查看是否正确。如果是在实际应用中,这时就可以将4个数据以hex的形式发送出去了。

然后将数据重组,这里直接使用tbuf[0]~tbuf[3]模拟接收方接收到的4个hex数据,将重组后的数据保存在res变量中,重组的方法也是根据float在计算机占4个字节,通过unsigned char指针依次为float的4个字节赋值即可

//先打印一下传入的float的值

//获取对应的4个字节,从低位到高位,这时就可以用于hex格式的数据传输了

//对拆分后的4个字节进行重组,模拟接收到hex后的数据还原过程

//模拟测试float转为4个16进制数进行数据传输的过程

查看float的每个字节内容(16进制):

数据重组后可以还原,方法是可以的。

int型数据与float一样都是占用4个字节,所以该方法也适用于将int转换为4个hex,只需修改float类型为int即可:

//先打印一下传入的int的值

//获取对应的4个字节,从低位到高位,这时就可以用于hex格式的数据传输了

//对拆分后的4个字节进行重组,模拟接收到hex后的数据还原过程

查看int的每个字节内容(16进制):

重组后的int的值:-

下面是整个本文的整个测试程序与运行结果:

//先打印一下传入的float的值

//获取对应的4个字节,从低位到高位,这时就可以用于hex格式的数据传输了

//对拆分后的4个字节进行重组,模拟接收到hex后的数据还原过程

//先打印一下传入的int的值

//获取对应的4个字节,从低位到高位,这时就可以用于hex格式的数据传输了

//对拆分后的4个字节进行重组,模拟接收到hex后的数据还原过程

//模拟测试float转为4个16进制数进行数据传输的过程

//测试int型的转换

查看a的每个字节的地址(16进制)与内容(10进制(+16进制)):

查看float的每个字节内容(16进制):

该方法也有可以传输int,因为float和int在计算机中都是占4个字节,测试如下:

查看int的每个字节内容(16进制):

重组后的int的值:-

请按任意键继续. . .

}

C语言,输入一个数,判断它是奇数还是偶数,如果是偶数则进一步判断它是否为4的倍数
输入一个数,判断它是奇数还是偶数,如果是偶数则进一步判断它是否为4的倍数

}

我要回帖

更多关于 c语言的题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信