c语言int,unsigned char, bit之间转换

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

void itob(uint8_t Data)
{
    uint8_t n[8]={0};

    //方法1:
    n[0] = (Data & 0x01) == 0x01 ? 1 : 0;
    n[1] = (Data & 0x02) == 0x02 ? 1 : 0;
    n[2] = (Data & 0x04) == 0x04 ? 1 : 0;
    n[3] = (Data & 0x08) == 0x08 ? 1 : 0;
    n[4] = (Data & 0x10) == 0x10 ? 1 : 0;
    n[5] = (Data & 0x20) == 0x20 ? 1 : 0;
    n[6] = (Data & 0x40) == 0x40 ? 1 : 0;
    n[7] = (Data & 0x80) == 0x80 ? 1 : 0;
    printf("1 - %u : (%u %u %u %u %u %u %u %u)\n", Data, n[0], n[1], n[2], n[3], n[4], n[5], n[6], n[7]);

    //方法2:
    int i;
    memset(n, 0, 8);
    for(i=0;i<8;i++)
    {
        n[i] = (Data & (0x01<<i)) == (0x01<<i) ? 1 : 0;
    }
    printf("2 - %u : (%u %u %u %u %u %u %u %u)\n", Data, n[0], n[1], n[2], n[3], n[4], n[5], n[6], n[7]);
}

void btoi(uint8_t n[8])
{
    uint8_t	Data = 0x00;
    //方法1:
    Data = n[0]|(n[1]<<1)|(n[2]<<2)|(n[3]<<3)|(n[4]<<4)|(n[5]<<5)|(n[6]<<6)|(n[7]<<7);

    printf("1 - %u : (%u, %u, %u, %u, %u, %u, %u, %u)\n", Data, n[0], n[1], n[2], n[3], n[4], n[5], n[6], n[7]);

    //方法2:
    int i;
    for(i=0;i<8;i++)
    {
        Data |= n[i]<<i;	
    }
    printf("2 - %u : (%u, %u, %u, %u, %u, %u, %u, %u)\n", Data, n[0], n[1], n[2], n[3], n[4], n[5], n[6], n[7]);
}
int main (void)
{
    //  12 : (0 0 1 1 0 0 0 0) 
    //  20 , (0 0 1 0 1 0 0 0) 
    //   4 : (0 0 1 0 0 0 0 0) 
    uint8_t	Data = 0x12;

    itob(0xc);
    itob(0x14);
    itob(0x4);
    
    // uint8_t n[8]={0,1,0,0,1,0,1,0};

    
    return 0;
}

int >> unsigned char >> bit

int num = get_val();
    if (num < 0)
    {
        wy_log("!!!read val  failed with %d", num);
        return num;
    }
    uint8_t data = num & 0xf;
    
    int i;

    memset(n, 0, 8);
    for (i = 0; i < 8; i++)
    {
        n[i] = (data & (0x01 << i)) == (0x01 << i) ? 1 : 0;
    }
    wy_log("data - %u : (%u %u %u %u %u %u %u %u)", data, n[0], n[1], n[2], n[3], n[4], n[5], n[6], n[7]);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值