zoukankan      html  css  js  c++  java
  • 字节、十六进制字符串相互转换(asc2hex、hex2asc)

    //==================================================================
    /**    
        功能:        将16进制数组转换成asc字符数组(短转长)
        @param[in]    hex :要转换的十六进制数组
        @param[in]    lenth :转换后的16进制数组的长度
        @param[out]    asc :转换后的asc字符数组(至少分配2倍的hex的大小)
        @par修改记录:
            2015.01.15    马兆瑞    修改asc不为空时出现的bug
    **/
    //==================================================================
    void hex2asc(unsigned char *hex, int hexlength, unsigned char *asc)
    {
        for(int i = 0; i < hexlength; i++)
        {
            sprintf((char*)asc+2*i, "%02X", hex[i]);
        }
    }
    
    //==================================================================
    /**    
        功能:        将asc字符数组转换成16进制数组(长转短),长度不足则末尾自动补F
        @param[in]    asc :要转换的asc字符数组
        @param[in]    lenth :转换后的16进制数组的长度
        @param[out]    hex :转换后的16进制数组
        @par修改记录:
            2015.12.22    马兆瑞
    **/
    //==================================================================
    void asc2hex(unsigned char *asc, int hexlength, unsigned char *hex)
    {
        if(strlen((char*)asc) < hexlength*2)
        {
            char *asc_temp = new char[hexlength*2+1];
            memset(asc_temp, 'F', hexlength*2+1);
            memcpy(asc_temp, asc, strlen((char*)asc));
            for(int i = 0; i < hexlength; i++)
            {
                char temp[3] = {asc_temp[i*2], asc_temp[i*2+1]};
                hex[i] = strtol(temp, 0, 16);
            }
            delete []asc_temp;
        }
        else
        {
            for(int i = 0; i < hexlength; i++)
            {            
                char temp[3] = {asc[i*2], asc[i*2+1]};
                hex[i] = strtol(temp, 0, 16);
            }
        }
    }

    void main()
    {
        unsigned char asc[] = "915600000221010021010A68", hex[100] = {0};
    
        asc2hex(asc, strlen((const char *)asc)/2 , hex);
    
        unsigned char ascr[512] = {0};
        hex2asc(hex, strlen((const char *)asc)/2 , ascr);
    }
     
  • 相关阅读:
    nodeJS中的包
    NPM
    代码检查工具jshint和csslint
    javascript中Date对象的应用
    Collection包结构,与Collections的区别
    TreeMap、HashMap、LindedHashMap的区别
    HashMap和ConcurrentHashMap的区别,HashMap的底层源码
    HashMap和HashTable的区别
    Map、Set、List、Queue、Stack的特点与用法
    String、StringBuffer与StringBuilder的区别
  • 原文地址:https://www.cnblogs.com/mzhrd/p/3454613.html
Copyright © 2011-2022 走看看