十六進制轉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’。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章