c++ c语言 bit位操作,char转bit,bit转char

直接上代码

//16位  0101重组成long
float cqlCharBytePrintf(char byData1,char byData2){
    int n0, n1, n2, n3, n4, n5, n6, n7;
    n0 = (byData1 & 0x01) == 0x01 ? 1 : 0;//底位
    n1 = (byData1 & 0x02) == 0x02 ? 1 : 0;
    n2 = (byData1 & 0x04) == 0x04 ? 1 : 0;
    n3 = (byData1 & 0x08) == 0x08 ? 1 : 0;
    n4 = (byData1 & 0x10) == 0x10 ? 1 : 0;
    n5 = (byData1 & 0x20) == 0x20 ? 1 : 0;
    n6 = (byData1 & 0x40) == 0x40 ? 1 : 0;
    n7 = (byData1 & 0x80) == 0x80 ? 1 : 0;//高位

    int m0, m1, m2, m3, m4, m5, m6, m7;
    m0 = (byData2 & 0x01) == 0x01 ? 1 : 0;//底位
    m1 = (byData2 & 0x02) == 0x02 ? 1 : 0;
    m2 = (byData2 & 0x04) == 0x04 ? 1 : 0;
    m3 = (byData2 & 0x08) == 0x08 ? 1 : 0;
    m4 = (byData2 & 0x10) == 0x10 ? 1 : 0;
    m5 = (byData2 & 0x20) == 0x20 ? 1 : 0;
    m6 = (byData2 & 0x40) == 0x40 ? 1 : 0;
    m7 = (byData2 & 0x80) == 0x80 ? 1 : 0;//高位

    //重组
    bitset <16> bitas;
    bitas.set(0,n0);//这是低位
    bitas.set(1,n1);
    bitas.set(2,n2);
    bitas.set(3,n3);
    bitas.set(4,n4);
    bitas.set(5,n5);
    bitas.set(6,n6);
    bitas.set(7,m0);
    bitas.set(8,m1);
    bitas.set(9,m2);
    bitas.set(10,m3);
    bitas.set(11,m4);
    bitas.set(12,0);
    bitas.set(13,0);
    bitas.set(14,0);
    bitas.set(15,0);//这是高位
    //转电压
    float tmvnum = (float)bitas.to_ulong()*((float)3300/(float)4095);
    float tvnum = tmvnum/1000;
    return  tvnum;
}

#include <bitset>
using namespace std;

    //8个bit转char
    bitset <8> a;
    a.set(0,1);
    a.set(1,1);
    a.set(2,1);
    a.set(3,1);
    a.set(4,1);
    a.set(5,0);
    a.set(6,1);
    a.set(7,1);
    printf("\n");//换行
    printf("%#X",a.to_ulong());
    printf("\n");//换行
    //8个bit转char
    bitset<8> foo ("11111111");
    printf("%#X",foo.to_ulong());

//char转字节打印

void charBytePrintf(char byData){
    printf("byte\n");
    int n0, n1, n2, n3, n4, n5, n6, n7;
    n0 = (byData & 0x01) == 0x01 ? 1 : 0;
    n1 = (byData & 0x02) == 0x02 ? 1 : 0;
    n2 = (byData & 0x04) == 0x04 ? 1 : 0;
    n3 = (byData & 0x08) == 0x08 ? 1 : 0;
    n4 = (byData & 0x10) == 0x10 ? 1 : 0;
    n5 = (byData & 0x20) == 0x20 ? 1 : 0;
    n6 = (byData & 0x40) == 0x40 ? 1 : 0;
    n7 = (byData & 0x80) == 0x80 ? 1 : 0;
    printf("%d",n0);
    printf("%d",n1);
    printf("%d",n2);
    printf("%d",n3);
    printf("%d",n4);
    printf("%d",n5);
    printf("%d",n6);
    printf("%d",n7);
    printf("\n%#x",byData);
}

char转8个字节

//转8bit
void convert(char c)
{
    char result[8]={0};
    for(int i=0;i<8;i++)
        result[i]=c&(0x01<<i);
}

//8个1的bit转char

    bitset <8> bitas;
    bitas.set(0,1);
    bitas.set(1,1);
    bitas.set(2,1);
    bitas.set(3,1);
    bitas.set(4,1);
    bitas.set(5,1);
    bitas.set(6,1);
    bitas.set(7,0);
    printf("%#X,",bitas.to_ulong());
     fprintf(fp,"%#X,",bitas.to_ulong());//这里可以写入文本
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

vqt5_qt6

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

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

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

打赏作者

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

抵扣说明:

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

余额充值