C/C++ 16进制转字符串,字符串转16进制 EX

 

{

复制代码
int Encryption::HexToStr(char *Hex)
{
    int _0 = 0;
    int _1 = 0;
    char buf[2] = { 0 };
    if (Hex[0] >= '0' && Hex[0] <= '9')
    {
        buf[0] = Hex[0];
        _0 = atoi(buf);
    }
    else
    {
        switch (Hex[0])
        {
        case 'A':
        {
            _0 = 10;
        }; break;
        case 'B':
        {
            _0 = 11;
        }; break;
        case 'C':
        {
            _0 = 12;
        }; break;
        case 'D':
        {
            _0 = 13;
        }; break;
        case 'E':
        {
            _0 = 14;
        }; break;
        case 'F':
        {
            _0 = 15;
        }; break;
        }

    }
    if (Hex[1] >= '0' && Hex[1] <= '9')
    {
        buf[0] = Hex[1];
        _1 = atoi(buf);
    }
    else
    {
        switch (Hex[1])
        {
        case 'A':
        {
            _1 = 10;
        }; break;
        case 'B':
        {
            _1 = 11;
        }; break;
        case 'C':
        {
            _1 = 12;
        }; break;
        case 'D':
        {
            _1 = 13;
        }; break;
        case 'E':
        {
            _1 = 14;
        }; break;
        case 'F':
        {
            _1 = 15;
        }; break;
        }

    }

    return _0 * 16 + _1;
}

char *Encryption::StringToHex_s(char *String, int Inlen)
{
    if (String == NULL || String == nullptr) { return nullptr; }

    int BufLen = Inlen * 2 + 1;

    char *Buf = new char[BufLen];
    memset(Buf, 0, BufLen);

    char buf[3] = { 0 };

    for (int i = 0; i < Inlen; i++)
    {
        sprintf_s(buf, "%02X", (unsigned char)String[i]);
        (Buf + (i * 2))[0] = buf[0];
        (Buf + (i * 2))[1] = buf[1];
    }
    return Buf;
}

char *Encryption::StringToHex_s(const char *String, int Inlen)
{
    return Encryption::StringToHex_s((char*)String,Inlen);
}

char *Encryption::HexToString_s(char *Hex, int *OutLen)
{
    if (Hex == NULL || Hex == nullptr) { return nullptr; }

    int HexLen = (int)strlen(Hex);

    if (HexLen % 2 == 0)
    {
        int index = 0;
        int len = HexLen / 2;
        char *buf = new char[len + 1];
        memset(buf, 0, len + 1);
        *OutLen = len;
        for (int i = 0; i < len; i++)
        {
            unsigned char var = Encryption::HexToStr(Hex + index);
            buf[i] = var;
            index += 2;
        }
        return buf;
    }
    return NULL;
}

char *Encryption::HexToString_s(const char *Hex, int *OutLen)
{
    return Encryption::HexToString_s((char*)Hex, OutLen);
}
复制代码

 

}

posted @   YZFHKMS-X  阅读(6393)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示