大小端 - 数据压缩与解析demo

 数据压缩与解析测试:

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

猜你喜欢

转载自blog.csdn.net/reasonyuanrobot/article/details/111238812