C++篇——在linux下将字节转16进制字符串, 16进制字符串转2进制字符串

一、字节转16进制字符串

std::string bytestohexstring(char* bytes,int bytelength) {
    string str("");
    string str2("0123456789abcdef");
    for (int i = 0; i < bytelength; i++) {
        int b;
        b = 0x0f & (bytes[i] >> 4);
        str.append(1, str2.at(b));   
        b = 0x0f & bytes[i];
        str.append(1, str2.at(b));
    }
    return str;
}

二、16进制字符串转2进制字符串 

方法1: 

string getBinStr(string hexStr) {
    long long val = strtoll(hexStr.c_str(), NULL, 16);
    string binStr = "";
    while (val > 0) {
        int remainder = val % 2;
        binStr.insert(binStr.begin(), '0' + remainder);
        val /= 2;
    }
    //不足长度的补0
    if (binStr.length() < 32) {  //这里的32为你实际要输出的2进制字符串的长度
        string temp = "";
        for (int i = 0; i < 32 - binStr.length(); i++) {
            temp.append("0");
        }
        binStr = temp.append(binStr);
    }
    return binStr;
}

方法2: 

//性能略优于方法1
string getBinStr(string hexStr) {
    long long val = strtoll(hexStr.c_str(), NULL, 16);
    char binary[32];
    for (int i = 31; i >= 0; i--) 
    { 
        binary[31 - i] = '0' + ((val >> i) & 1);
    }
    string binStr(binary);
    return binStr;
}

方法3:

#include <bitset>

//无法处理大于32位的数值。  性能与方法2差不多
string getBinStr(string hexStr) {
    long val = stol(hexStr.c_str(), NULL, 16);
    bitset<32> binaryNum(val);
    return binaryNum.to_string();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

易Yi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值