获取16位无符号整数高字节的三种方法(基于小端存储)

/*
    获取16位无符号整数高字节的三种方法(基于小端存储)
*/
#include <stdio.h>
#include <stdint.h>
#define highByte(x) ((uint8_t)((x) >> 8))   //通过多于一个字节的移位运算实现

typedef union number {      //通过联合体实现
    uint16_t value;         //利用联合体的成员共用内存,结构体的成员连续存放
    struct {
        uint8_t low, high;
    } half;
} number16_t;

uint8_t getHighByte(uint16_t n) {   //通过指针运算实现
    uint8_t * ptr = (uint8_t *)&n;  //利用低位字节存放在低地址,高位字节存放在高地址
    return *(ptr + 1);
}

int main() {
    uint16_t num = 0xABCD;
    number16_t num1 = {0xABCD};

    printf("way 1: %X\n", highByte(num));
    printf("way 2: %X\n", getHighByte(num));
    printf("way 3: %X\n", num1.half.high);
    return 0;
}

你可能感兴趣的:(获取16位无符号整数高字节的三种方法(基于小端存储))