工作中C语言高低字节转换

工作中C语言高低字节转换

C语言高低字节转换

#include <iostream>
#include <stdint.h>
#include <stdio.h>

#define _G_HI24_BYTE(x) (((x) >> 24) & 0xFF)
#define _G_HI16_BYTE(x) (((x) >> 16) & 0xFF)
#define _G_HI8_BYTE(x) (((x) >> 8) & 0xFF)
#define _G_HI_BYTE(x) ((x) & 0xFF)

//#define	addr1_switch	HAL_GPIO_ReadPin(ADDR1_GPIO_PORT,ADDR1_GPIO_PIN)
//#define	addr2_switch	HAL_GPIO_ReadPin(ADDR2_GPIO_PORT,ADDR2_GPIO_PIN)
//#define	addr3_switch	HAL_GPIO_ReadPin(ADDR3_GPIO_PORT,ADDR3_GPIO_PIN)
//#define	addr4_switch	HAL_GPIO_ReadPin(ADDR4_GPIO_PORT,ADDR4_GPIO_PIN)
//#define	addr5_switch	HAL_GPIO_ReadPin(ADDR5_GPIO_PORT,ADDR5_GPIO_PIN)

#define GetBit(Number,pos) ((Number >> pos) & 1)
#define SetBit(Number,pos) ((Number) |= (1<<pos))
#define ClrBit(Number,pos) ((Number) &=~(1<<pos))
#define FanBit(Number,pos) ((Number) ^= (1<<pos))

using namespace std;
int main1();

int main()
{
    /***1.uint16_t拆为2个uint8_t*****/
    uint16_t checksum = 257;

    /***1.1 运算法操作*****/
    uint8_t ck[2] = {0};
    ck[0] = (uint8_t)(checksum & 0xFF);
    ck[1] = (uint8_t)(checksum >> 8);
    printf("ck[0]:%d ck[1]:%d\n", ck[0], ck[1]);

    /***1.2 宏定义*****/
    ck[0] = _G_HI_BYTE(checksum);
    ck[1] = _G_HI8_BYTE(checksum);
    printf("_G_HI_BYTE ck[0]:%d ck[1]:%d\n", ck[0], ck[1]);

    /***2. 2个uint8_t合成uint16_t*****/
    ck[0] = 0x01;
    ck[1] = 0x01;

    /***2.1 按位合成*****/
    uint16_t checksum1 = ck[0]|ck[1]<<8;
    printf("checksum1:%d\n", checksum1);

    /***2.2 累加合成*****/
    uint16_t checksum2 = ck[0] + (ck[1]<<8);
    printf("checksum2:%d\n", checksum2);

    /***3 取Byte某一个bit******/
    uint8_t num = 0xAA;

    for(int i = 0; i < 8; i++)
    {
        printf("GetBit%d:%x\n", i, GetBit(num,i));
    }

    num = 0;
    for(int i = 0; i < 8; i++)
    {
        printf("ClrBit%d:%x\n", i, SetBit(num,i));
    }

    return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静思心远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值