数据移位组合高位始终为0——C语言数据类型转换避坑
1、问题由来:
两个char类型数据高低位组合为两字节数据,数据高位一直没有值(Linux 系统下正常windows下异常)
2、问题描述:
uint16_t data_in[256] = {0}; short test = 399;//0x18F char ptr[2] = {0}; memcpy(ptr,&test,2); printf("ptr=%d %d \n",ptr[0],ptr[1]); uint16_t test2= ptr[0] + (((uint16_t)ptr[1])<<8); uint16_t test3= (uint8_t)ptr[0]; uint16_t test4= ptr[1]; printf("test2 =%d %d %d \n",test2,test3,test4);
打印上述结果:

3、解决方案:
uint16_t test2= ptr[0] + (((uint16_t)ptr[1])<<8); 由于ptr[0] 打印为-113,高位基本上全为FF,所以再在高位加1 ,数值不会改变;
将
char ptr[2] = {0};改成uint8_t即可,后面数据以及前面代码均改变;
uint16_t data_in[256] = {0}; uint16_t test = 399;//0x18F uint8_t ptr[2] = {0}; memcpy(ptr,&test,2); printf("ptr=%d %d \n",ptr[0],ptr[1]); uint16_t test2= ptr[0] + (ptr[1]<<8); uint16_t test3= (uint8_t)ptr[0]; uint16_t test4= ptr[1]; printf("test2 =%d %d %d \n",test2,test3,test4);
浙公网安备 33010602011771号