zoukankan      html  css  js  c++  java
  • 16进制串与ASCII字符串相互转换

    提供两个函数,方便十六进制串与ASCII 字符串之间的相互转换,使用函数需要注意的是返回的串是在堆上通过 calloc 分配的,所以,记得使用完返回值释放该块,并且将指向该块的指针 =NULL 。
    // 函数输入字符串,输出字符串对应的16进制串
    16进制串与ASCII字符串相互转换 - DH冰 - //... DH冰的安全笔记
    char *chstohex ( char* chs )
    {
        char hex[16] = { '0', '1', '2', '3', '4', '5', '6',
            '7', '8','9', 'A', 'B', 'C', 'D', 'E', 'F'
        };

        int len = strlen ( chs );
        char* ascii = NULL ;
        ascii = (char*)calloc ( len * 3 + 1, sizeof(char) );            // calloc ascii
        
        int i = 0;
        while( i < len )
        {
            ascii[i*2] = hex[(int)( (char)chs[i] / 16 )] ;
            ascii[i*2 + 1] = hex[(int)( (char)chs[i] % 16 )] ;
            ++i;
        }

        return ascii;                    // ascii 返回之前未释放
    }
    // 函数输入16进制字符串,输出对应的字符串
    char *hextochs ( char* ascii )
    {
        int len = strlen ( ascii ) ;
        if( len%2 != 0 )
            return NULL ;
        char *chs = NULL ;
        chs = (char*)calloc( len / 2 + 1, sizeof(char) );                // calloc chs

        int  i = 0 ;
        char ch[2] = {0};
        while( i < len )
        {
            ch[0] = ( (int)ascii[i] > 64 ) ? ( ascii[i]%16 + 9 ) : ascii[i]%16 ;
            ch[1] = ( (int)ascii[i + 1] > 64 ) ? ( ascii[i + 1]%16 + 9 ) : ascii[i + 1]%16 ;
            
            chs[i/2] = (char)( ch[0]*16 + ch[1] );
            i += 2;
        }

        return chs ;            // chs 返回前未释放
    }

    以上转自:http://blog.163.com/163_dhbing/blog/static/11738780320091086511358/

    /*
    字符串转16进制
    */

    void StrToHex(BYTE *pbDest, BYTE *pbSrc, int nLen)
    {
    char ddl,ddh;
    int i;

    for (i=0; i<nLen; i++)
    {
    ddh = 48 + pbSrc[i] / 16;
    ddl = 48 + pbSrc[i] % 16;
    if (ddh > 57) ddh = ddh + 7;
    if (ddl > 57) ddl = ddl + 7;
    pbDest[i*2] = ddh;
    pbDest[i*2+1] = ddl;
    }

    pbDest[nLen*2] = '';
    }

  • 相关阅读:
    vscode入门使用教程(页面调试)
    .net core3.1开始页面实时编译
    Ubuntu 编辑文件、安装、删除软件等常用命令(持续更新)
    .NetCore3.1中的WebApi如何配置跨域
    PC电脑端如何多开Skype,一步搞定!
    简单几步为博客园添加动态动漫妹子
    如何在SqlServer中使用层级节点类型hierarchyid
    Entity framework Core 数据库迁移
    牛客网剑指offer【Python实现】——part1
    Linux实战——Shell编程练习(更新12题)
  • 原文地址:https://www.cnblogs.com/dengpeng1004/p/6872083.html
Copyright © 2011-2022 走看看