博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 十六进制字符串和字符数组相互转换
阅读量:4191 次
发布时间:2019-05-26

本文共 1691 字,大约阅读时间需要 5 分钟。

字符串转byte数组,就是实现如下功能:把一个字符串,比如“E4F1C3A81F”每两位作为一个十六进制数存到一个unsigned char 型的数组(buf)里,buf[0] = 0xE4,buf[1] = 0xF1,buf[2] = 0xC3,buf[3] = 0xA8......。我们知道字符串中的字符在计算机中大小是其ASCII码值,比如E的ASCII值是69,但是E如果作为一个十六进制数,在计算机中的大小是14,所以我们需要找到一种对应关系将字母E(69)->14,同样将第二位的数字字符4(ASCII:52)->4,并将转换后的14放到高4位,4放到低4位即可。

 

16进制字符串转字节数组

int hex2bytearray(char s[],unsigned char bits[])

{

    int i,n = 0;
    for(i = 0; s[i]; i += 2) {
        if(s[i] >= 'a' && s[i] <= 'f')
            bits[n] = s[i] - 'a' + 10;
        else bits[n] = s[i] - '0';
        if(s[i + 1] >= 'a' && s[i + 1] <= 'f')
            bits[n] = (bits[n] << 4) | (s[i + 1] - 'a' + 10);
        else bits[n] = (bits[n] << 4) | (s[i + 1] - '0');
        ++n;
    }
    return n;
}

 

字节数组转16进制字符串方法1

string bytearray2hex(unsigned char byte_arr[],int arr_len)

{
    string hexstr="";
    for (int i=0;i<arr_len;i++)
    {
        char hex1;
        char hex2;
        int value=byte_arr[i];
        int v1=value/16;
        int v2=value % 16;

        if (v1>=0&&v1<=9)

            hex1=(char)(48+v1);
        else
            hex1=(char)(55+v1);

        if (v2>=0&&v2<=9)

            hex2=(char)(48+v2);
        else
            hex2=(char)(55+v2);
        
        if (hex1>='A'&&hex1<='F')
            hex1+=32;

        if (hex2>='A'&&hex2<='F')

            hex2+=32;

        hexstr=hexstr+hex1+hex2;

    }
    return hexstr;
}

 

字节数组转16进制字符串方法2

char hb2hex(unsigned char hb)

{

    hb = hb & 0xF;
    return hb < 10 ? '0' + hb : hb - 10 + 'a';
}

string bytearray2hex(unsigned char byte_arr[],int arr_len)

{
    string res;
    for(size_t i = 0; i < arr_len; ++ i) {
        res.push_back(hb2hex(byte_arr[i] >> 4));
        res.push_back(hb2hex(byte_arr[i]));
    }
    return res;
}

 

int main()

{
    char in[33] = "7bf94fef092a47109c518995ef88c4b2";
    unsigned char out[128]={0};
    hex2bytearray(in, out);
    int len = strlen((const char*)out);
    for(int i=0; i<len; i++)
        cout << out[i];

    printf("\r\n");

    string ppp = bytearray2hex(out,16);

    cout << ppp.c_str();

    system("pause");

    return 0;
}

转载地址:http://peooi.baihongyu.com/

你可能感兴趣的文章
(七)Git--自定义Git
查看>>
(五)Git--分支管理
查看>>
(四)Git--远程仓库
查看>>
(六) Git--标签管理
查看>>
java中继承,子类是否继承父类的构造函数
查看>>
什么是Spring Cloud ?
查看>>
pyqt实现界面化编程
查看>>
qt写DLL文件并调用和出现的问题分析
查看>>
工厂模式(Factory)-设计模式(一)
查看>>
建造者模式(Builder)-设计模式(三)
查看>>
初学Java必备基础知识,编程领域你需要掌握的关键点!
查看>>
阿里五年Java程序员的总结,献给还在迷茫中的你!
查看>>
程序员身上有异味,同事为什么都不会直接告诉他?
查看>>
Java、C、C+ +、PHP、Python分别用来开发什么?一篇文章告诉你!
查看>>
Linux-SHELL常用命令
查看>>
Linux-网络运维基础
查看>>
Verilog编程网站学习——门电路、组合电路、时序电路
查看>>
android——学生信息显示和添加
查看>>
Android——ImageSwitcher轮流显示动画
查看>>
Android——利用手机端的文件存储和SQLite实现一个拍照图片管理系统
查看>>