十六进制转SAC编码

2 篇文章 0 订阅
     今天在项目中遇到了这么一个问题,就是我用JNI调用C语言,打开驱动文件读取数据,由于数据是十六进制,返回数据无法在前台显示,代码如下:
     char* fibReadMagcard()
{
 memset(TrackBuf,0,TRACK_LEN+1);
read(magcard,TrackBuf,TRACK_LEN);
return (char*)TrackBuf;
}

JNIEXPORT jstring JNICALL Java_com_linc_Lib_FibLib_fibReadMagcard
(JNIEnv* env, jclass obj, jstring s) {
  jstring rtn=0;
rtn = (*env)->NewStringUTF(env,fibReadMagcard());
return rtn;
}

需要将十六进制的数据转换成ASC编码,以此进行输出。
这还是在我同事的帮助下才解决的,本人对字符转码不是很在行,基本不扎实,汗颜啊,需要恶补了,在此谢谢我的同事,哈哈!!废话不说,代码如下:
 char* fibReadMagcard()
{
   int i,ret;
   memset(TrackBuf,0,TRACK_LEN+1);
   memset(bufx,0,TRACK_LEN*2+3);
   ret = read(magcard,TrackBuf,TRACK_LEN);
   for(i=0; i<TRACK_LEN; i++)
  {
     bufx[i*2]=(TrackBuf[i]&0xF0)>>4;
     bufx[i*2+1]=(TrackBuf[i]&0x0F);
     if(bufx[i*2]>=0 && bufx[i*2]<=9 )
          bufx[i*2]+=0x30;
     else if(bufx[i*2]>=0x0a && bufx[i*2]<=0x0f)
          bufx[i*2]='A'+(bufx[i*2]-0x0a);

     if(bufx[i*2+1]>=0 && bufx[i*2+1]<=9 )
          bufx[i*2+1]+=0x30;
     else if(bufx[i*2+1]>=0x0a && bufx[i*2+1]<=0x0f)
          bufx[i*2+1]='A'+(bufx[i*2+1]-0x0a);       
  }   
   return (char*)bufx;
}
基本原理就是当字符是0-9时,加0x30,若字符是A-F时,减0x0f,并且加‘A’。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值