Converting 24 bit integer (2s complement) to 32 bit integer in C++

前端 未结 2 1434
礼貌的吻别
礼貌的吻别 2021-01-15 15:37

The dataFile.bin is a binary file with 6-byte records. The first 3 bytes of each record contain the latitude and the last 3 bytes contain the longitude. E

2条回答
  •  走了就别回头了
    2021-01-15 15:48

    When an unsigned char is casted to an int the higher order bits are filled with 0's

    When a signed char is casted to a casted int, the sign bit is extended. ie:

    int x;
    char y;
    unsigned char z;
    y=0xFF
    z=0xFF
    x=y;
    /*x will be 0xFFFFFFFF*/
    x=z;
    /*x will be 0x000000FF*/
    

    So, your algorithm, uses 0xFF as a mask to remove C' sign extension, ie

    0xFF == 0x000000FF
    0xABCDEF10 & 0x000000FF == 0x00000010
    

    Then uses bit shifts and logical ands to put the bits in their proper place.

    Lastly checks the most significant bit (newInt & 0x00800000) > 0 to decide if completing with 0's or ones the highest byte.

提交回复
热议问题