c语言整型转4个字节的十六进制,C语言将float拆分为4个hex传输与重组

问题引出

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

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

ac9c323187c70922dc7d99549422a841.png

分步测试

float型的2进制形式

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

void printf_bin(float num)//注意这次这里的参数类型改成了float

{

int i, j, k;

unsigned char *p = (unsigned char*)&num + 3;

for (i = 0; i < 4; i++) //处理4个字节(32位)

{

j = *(p - i); //取每个字节的首地址

for (int k = 7; k >= 0; k--) //处理每个字节的8个位

{

if (j & (1 << k))

printf("1");

else

printf("0");

}

printf(" ");

}

printf("\r\n");

}

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

float a = 3.887;

//使用上次自己写的printf_bin函数打印一下float a的2进制形式

printf("查看一下float型a=%f的2进制形式:\r\n", a);

printf_bin(a);

//使用unsigned char来验证float的每一个字节

unsigned char *p1 = (unsigned char*)&a; //获取a的首地址

unsigned char *p2 = (unsigned char*)&a + 1;//获取a的首地址的后一个字节地址

unsigned char *p3 = (unsigned char*)&a + 2;//获取a的首地址的后两个字节地址

unsigned char *p4 = (unsigned char*)&a + 3;//获取a的首地址的后三个字节地址

printf("\r\n查看a的每个字节的地址(16进制)与内容(10进制(+16进制)):\r\n");

printf("[a] p1:%x, %d(%x)\r\n", p1, *p1, *p1);//打印p1的地址与

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值