数据压缩与解析测试:
int test_bite()
{
short data_i = -32768;//16位取值范围[-32768~32767]
printf(">>; data_i 0x= %x\n", data_i);
unsigned char rbuf[10] = {0};//以无符号char接收\存储原始数据,(同等位数,无符号可存储数最大)
//*******数据压缩
// rbuf[0] = 0xFF;
// rbuf[1] = 0x09;
rbuf[0] = (data_i & 0xFF00)>>8;
rbuf[1] = (data_i & 0xFF);
printf(">>; data_H_8 0x= %x\n", rbuf[0]);
printf(">>; data_L_8 0x= %x\n", rbuf[1]);
short data_h_8 = 0;//高字节
short data = 0;
//**********数据提取
data = (short)((rbuf[0]<<8) + rbuf[1]) ;//加括号,涉及到优先级
printf(">>; data= %d\n", data);
printf(">>; data 0x = %x\n", data);
printf(">>; sizeof(int) = %d\n", sizeof(int));//4
printf(">>; sizeof(float) = %d\n", sizeof(float));//4
printf(">>; sizeof(short) = %d\n", sizeof(short));//2
printf(">>; sizeof(char) = %d\n", sizeof(char));//1
return 0;
/*** 结果:
* >>; data_i 0x= ffff8000
>>; data_H_8 0x= 80
>>; data_L_8 0x= 0
>>; data= -32768
>>; data 0x = ffff8000
>>; sizeof(int) = 4
>>; sizeof(float) = 4
>>; sizeof(short) = 2
>>; sizeof(char) = 1
* **/
}
>>; data_i 0x= ffff8000
>>; data_H_8 0x= 80
>>; data_L_8 0x= 0
>>; data= -32768
>>; data 0x = ffff8000
>>; sizeof(int) = 4
>>; sizeof(float) = 4
>>; sizeof(short) = 2
>>; sizeof(char) = 1
void floatPack(float data, char *msg)
{
int d = data;
/* 大端模式
* 从高字节到低字节,依次存储到 msg中
*/
msg[0] = (char) ((d >> 24) & 0xFF);
msg[1] = (char) ((d >> 16) & 0xFF);
msg[2] = (char) ((d >> 8) & 0xFF);
msg[3] = (char) (d & 0xFF);
}
int floatUnPack(char *msg)
{
return (int)((msg[0] & 0xFF) << 8*3)
|((msg[1] & 0xFF) << 8*2)
|((msg[2] & 0xFF) << 8*1)
|(msg[3] & 0xFF);
}
大小端与移位、赋值
https://www.jianshu.com/p/1efa80287e09