在编程过程中有时会涉及到类型转换问题,例如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进行按位与操作。