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);
    }
     
  • 相关阅读:
    Java读取Excel文件(包括xls和xlsx)的样例程序
    Node.js中使用pipe拷贝大文件不能完全拷贝的解决办法
    Spring Boot中一个Servlet主动断开连接的方法
    算法学习笔记1.3.3 质因数分解
    算法学习笔记1.3.2 素数判定
    算法学习笔记1.3.1 素数筛法
    算法学习笔记1.2.2 扩展欧几里得
    算法学习笔记1.2.1 欧几里得算法
    算法学习笔记1.1.3 矩阵的逆
    Windows下Tesseract-OCR的安装
  • 原文地址:https://www.cnblogs.com/mzhrd/p/3454613.html
Copyright © 2011-2022 走看看