获取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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值