c++ 十六进制转字符串(ASCII码)

Posted 岁月神偷小拳拳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 十六进制转字符串(ASCII码)相关的知识,希望对你有一定的参考价值。

在网络通信中经常用到16进制和ASCII码字符数组互相转换的功能,完整代码如下:

#include <iostream>

using namespace std;
unsigned int ssstrlen(const char *str)

    const char *cp = str;
    while(*cp++);
    return (cp - str -1);


int hex2char(uint8_t c)

    return ((c >= '0') && (c <= '9')) ? int(c - '0') :
           ((c >= 'A') && (c <= 'F')) ? int(c - 'A' + 10) :
           ((c >= 'a') && (c <= 'f')) ? int(c - 'a' + 10) :
           -1;


int Hex2Ascii(char* hex, char* ascii)

    int hexLen = ssstrlen(hex);
    int asciiLen = 0;

    for (int i = 0, cnt = 0; i<hexLen; i++)
   
        char c = hex2char(hex[i]);

        if (-1 == c)
            continue;
        if(cnt)
            cnt = 0;
            ascii[asciiLen++] += c;
        else
            cnt = 1;
            ascii[asciiLen] = c << 4;
       
   
    ascii[asciiLen++] = 0;
    return asciiLen;

int main()

    char outbuffer[64] = "43522b4556454e543d54425f50415553453b";
    //std::cout << outbuffer << std::endl;

    char in[64] = " " ;
    int len = strlen(outbuffer);
    int idx = 0;
    for (int n = 0; n < len; n++)
    
        in[idx++] = outbuffer[n];
        if ((n + 1) % 2 == 0)
        
            in[idx++] = ' ';//赋一个空格
        
    

    //char in[] = "43 52 2b 45 56 45 4e 54 3d 54 42 5f 50 41 55 53 45 3b ";
    char out[100];
    Hex2Ascii(in, out);

    int len = strlen(out);
    for(int i=0; i<len; i++)
        cout << out[i];

    return 0;

转换输出结果为:CR+EVENT=TB_PAUSE;

以上是关于c++ 十六进制转字符串(ASCII码)的主要内容,如果未能解决你的问题,请参考以下文章

ASCII码表

在ASCII码字符编码中,啥字符无法显示或打印出来

计算机组成原理 王道考研2021 第二章:数据的表示和运算 -- BCD码字符与字符串(ASCII大端模式 / 小端模式)

在ASCII码字符编码中,啥字符无法显示或打印出来

C++中数字转ascii码函数

ASCII码字符对照表