十六进制转SAC编码

     今天在项目中遇到了这么一个问题,就是我用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’。

你可能感兴趣的:(java,c,jni,语言)