把一个“十六进制”字符串转换为十六进制数字输出

举例:“9A”

    1:取出字符串。

    2:去掉字符串首尾的空格

    3:循环取出字符串中的单个字符。

    4:判断取出的单个字符是否在0—9 、A—F、a—f之中。

    5:转换思路:

    a:把取到的字符减去一个合适的数值,转换为十进制的数字(字符串->十进制)

    b:因为一个字符(8 bits),所以十位的字符应该左移4位之后 或上 (个位数字 与上 0x0F)的结果。

    6:代码转换如下:(vc代码:)  

for (int j=0 ,i=0;j<cStr.GetLength();j+=3,i++)
{
  getStr = cStr.Mid(j,2);  //获取子字符串内容
  strcpy(buf,getStr.GetBuffer(getStr.GetLength()));//把CSting 字符串保存到字符数组中 
 
  int a=buf[0];//十六进制中的个位
  int b=buf[1];//十六进制中的十位

  if (a >= 48 && a <= 57)
  {
   a -= 48;//48 == '0'
  }else if(a >= 97 && a <= 102)
  {
   a -= 87;//97 == 'a'
  }
  else if (a >= 65 && a <= 70)
  {
   a -= 55;//65 == 'A'
  }
  else
  {
   CString Err0;
   Err0.Format("发现非法数字 %c 输入,请重新输入",buf[0]);
   MessageBox(Err0);
   return;
  }

  if (b >= 48 && b <= 57)
  {
   b -= 48;
  }else if(b >= 97 && b <= 102)
  {
   b -= 87;
  }
 
  else if (b >= 65 && b <= 70)
  {
   b -= 55;
  }
  else
  {
   CString Err1;
   Err1.Format("发现非法数字 %c 输入,请重新输入",buf[1]);
   MessageBox(Err1);
   return;
  }

  unsigned char c = ((a << 4) | (b & 0x0F ));
  s_au8TagIDBuf[i] = c; //我们要的十六进制数字

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值