C语言相关不能使用BOOL强转!!!

本文探讨了在编程中进行类型转换时需要注意的问题,特别是32位到8位转换可能导致的数据丢失。强调了使用循环移位和按位与操作来避免精度丢失的重要性,并指出在处理位标志时,不应直接用BOOL转换,而应使用移位和按位与操作。
摘要由CSDN通过智能技术生成

在编程过程中有时会涉及到类型转换问题,例如8位的0x63,转为32位时,会自动在前方补0,即变成0x00000063,不会涉及到丢精度或者其他危险。

而在涉及32位转8时则要特别注意,因为以0x12345678为例,转为uint8时则变为0x78,剩余高位精度丢失,由于数据丢失可能使程序发生无法想象的问题。

标准的做法是:

ret_data[0] = (UInt8)longitude&0xFF;
ret_data[1] = (UInt8)(longitude >> 8)&0xFF;
ret_data[2] = (UInt8)(longitude >> 16)&0xFF;
ret_data[3] = (UInt8)(longitude >> 24)&0xFF;

利用循环移位赋值给一个int8的数组,这样既解决了数据类型转换问题,也避免了转换过程中的数据丢失问题,而且利用0xff进行“&”按位与操作

如果一个数据的某一个Bit位作为标志位,此时千万千万不能一时糊涂用BOOL强制转换某一位bit,一定一定不能,标准的做法是进行移位,然后与0x01进行按位与运算。

ret_data[0] = (mid_data >> 2) & 0x01;

例如段代码中是将mid_data 的第Bit2作为目标数据为取出,先进性移位操作,然后与0x01进行按位与操作。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值