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

    提供两个函数,方便十六进制串与ASCII 字符串之间的相互转换,使用函数需要注意的是返回的串是在堆上通过 calloc 分配的,所以,记得使用完返回值释放该块,并且将指向该块的指针 =NULL 。

    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 返回前未释放
    }
  • 相关阅读:
    jvm
    java8新特性Lambada,Steam流
    数组链表栈队列 散列表
    数据结构算法基本知识
    设计模式七大原则
    java关键字
    Excel导出(适合项目开发)
    Excel导出(适合初学者)
    angular.min.js:80 Error:
    angular中出现错误的提示指令[ng:areq]的原因
  • 原文地址:https://www.cnblogs.com/iack/p/4007477.html
Copyright © 2011-2022 走看看