zoukankan      html  css  js  c++  java
  • c++ USBkey常用的转换方法

    注意十六进制跟十六进制的字符的概念?????

    机器码跟字符串的概念???????

    如:机械:" #Eg壂惋" 转化后的输出十六进制结果为23456789ABCDEF00

                     字符串转变成十六进制的字符串 "55ff" 0x55 0xff

          十六进制的字符串转变成字符串 0x55 0xff "55ff"

    //hex更便于程序员自身识别,而asc更便于计算机识别
    /*******
    十六进制转换成ASCII
    将数据好更好地呈现给机器

     如:23456789ABCDEF 转化后的输出结果为  " #Eg壂惋"
    ********/
    int HexToAsc(char *pDst, char *pSrc, int nSrcLen)
    {
      for(int i=0; i<nSrcLen; i+=2)
      {
      // 输出高4位
      if(*pSrc>='0' && *pSrc<='9')
      {
        *pDst = (*pSrc - '0') << 4;
      }
      else if(*pSrc>='A' && *pSrc<='F')
      {
        *pDst = (*pSrc - 'A' + 10) << 4;
      }
      else
      {
        *pDst = (*pSrc - 'a' + 10) << 4;
      }

      pSrc++;

      // 输出低4位
      if(*pSrc>='0' && *pSrc<='9')
      {
        *pDst |= *pSrc - '0';
      }
      else if(*pSrc>='A' && *pSrc<='F')
      {
        *pDst |= *pSrc - 'A' + 10;
      }
      else
      {
        *pDst |= *pSrc - 'a' + 10;
      }

      pSrc++;
      pDst++;
    }

      // 返回目标数据长度
      return nSrcLen / 2;
    }

    /*******
    ASCII转换成十六进制
    将机器返回的字节码数据更友好地呈现给程序员识别,所以需要将asc转换为hex的形式

      如:机械:" #Eg壂惋" 转化后的输出结果为23456789ABCDEF00
    ********/
    int AscToHex(char*pDst,char *pSrc,int SrcLen)
    {
      /*符串”0123456789ABCDEF” 该字符串表示的是十六进制的值,每个元素相当于4个bit的值,
      所以每两位相当于一个byte。该字符串每个元素的取值范围为0~9和A~F,
      总共16个值,即16进制的16个数字*/
      const char tab[]="0123456789ABCDEF"; // 0x0-0xf的字符查找表
      for(int i=0; i<SrcLen; i++)
      {
        *pDst++ = tab[*((unsigned char*)pSrc) >> 4]; // 输出低4位
        *pDst++ = tab[*((unsigned char*)pSrc) & 0x0f]; // 输出高4位
        pSrc++;
      }

      // 输出字符串加个结束符
      *pDst = '';

      // 返回目标字符串长度
      return SrcLen * 2;
    }

    //字符串转变成十六进制的字符串 "55ff" 0x55 0xff
    int AscToHex(char *Dest,char *Src,int SrcLen)
    {
      int i;
      for ( i = 0; i < SrcLen / 2; i ++ )
      {
        sscanf(Src + i * 2,"%02X",(unsigned char *)&Dest[i]);
      }
      return 0;
    }

    //十六进制的字符串转变成字符串 0x55 0xff "55ff"
    int HexToAsc(char *Dest,char *Src,int SrcLen)
    {
      int i;
      for ( i = 0; i < SrcLen; i ++ )
    {
      sprintf(Dest + i * 2,"%02X",(unsigned char)Src[i]);
    }
      Dest[i * 2] = 0;
      return 0;
    }

  • 相关阅读:
    mysql 5.7开启sql日志的配置
    Apache显示目录列表及icons目录的问题
    WebGL学习笔记二——绘制基本图元
    java上传文件类型检测
    binlog
    vs2015下C4819该文件包含不能在当前代码页(936)中表示的字符问题解决
    WebGL学习笔记一
    vs2015 debug时出现 C2039“cout”: 不是“std”的成员
    spring boot实现切割分片上传
    springboot自定义类@Resource注入为null的问题
  • 原文地址:https://www.cnblogs.com/whbCNW/p/3669725.html
Copyright © 2011-2022 走看看