C++ 常见进制转换代码

C++ 进制转换代码记录

一丶进制转换

1.1 介绍

再平常写代码的时候经常会用到进制转换。 比如16进制转为10进制。
16进制值转为Ascii等。所以这里启用一个整理。方便下次炒代码。
代码来源于网上以及朋友提供的。

二丶 十六进制字符串转换为Ascii

2.1 方法1 Char类型操作

//************************************
// Parameter: 要进行转换的十六进制字符串
// Parameter: 十六进程字符串的长度
// Parameter: 传出的缓冲区,结果存放在此缓冲区,请注意一定保证缓冲区大小
//************************************
void CFileOpt::Hex2Asc1(IN unsigned char *hex, IN int hexlength, OUT unsigned char *asc)
{
    for (int i = 0; i < hexlength; i++)
    {
        sprintf((char*)asc + 2 * i, "%02X", hex[i]);
    }
}

2.2 方法2 STL String操作

//************************************
// Parameter: 要进行转换的十六进制字符串    string类型
// Return:    返回转换后的结构字符串
//************************************
std::string HexToAsc(string hexStr)
{
    string res = "";
    unsigned char* hexDigitTable = (unsigned char*)"0123456789abcdef";
    for (int i = 0; i < hexStr.length(); i++)
    {
        unsigned char asciiDigit1 = hexDigitTable[hexStr.at(i) & 0x0f];
        unsigned char asciiDigit0 = hexDigitTable[(hexStr.at(i) & 0xf0) >> 4];
        res += asciiDigit0;
        res += asciiDigit1;
    }
    return res;
}

2.3 方法3 google写法

这种方式是从逆向google Chrome的时候得到的。自己封装的
当然你可以自己修改参数

//************************************
// Parameter: 要进行转换的十六进制字符串
// Parameter: 十六进制字符串的长度
// Parameter: 传出的string 是一个指针 外面可以传递 &strxxx 也可以修改为引用
//************************************
bool Hex2Asc2(
    const unsigned char* data,
    int data_len,
    std::string* string) {
    if (!string)
        return false;

    string->clear();
    if (data_len < 1 || !data)
        return false;

    static const char kHex[] = "0123456789ABCDEF";

    // Fix the buffer size to begin with to avoid repeated re-allocation.
    string->resize(data_len * 2);
    int index = data_len;
    while (index--) {
        string->at(2 * index) = kHex[data[index] >> 4];  // high digit
        string->at(2 * index + 1) = kHex[data[index] & 0x0F];  // low digit
    }

    return true;
}

2.4 总结

上述方法命令结果为如下

IN -> "AABB"
OUT-> "41414242"

三丶Ascii字符串转为16进制字符串

3.1 方法1 字符指针类型转换

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值