今天就跟大家聊聊有關(guān)如何實(shí)現(xiàn)linux下ASCII轉(zhuǎn)HEX,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了青浦免費(fèi)建站歡迎大家使用!
在項(xiàng)目開發(fā)過程有時(shí)需要對一串?dāng)?shù)字的16進(jìn)制文本轉(zhuǎn)換成16進(jìn)制數(shù)組,這是實(shí)現(xiàn)方法:
#include#include #include #include /*isspace,toupper的頭文件*/ #include /*uint8_t的頭文件*/ /*去除數(shù)組中的空格*/ char *trim(char *str) { if(str == NULL || *str == '\0') return NULL; int len = strlen(str); char *p = str; while(*p != '\0'){ while(isspace(*p)){ memmove(p,p+1,strlen(p+1)+1); } p++; } return str; } /*ascii 轉(zhuǎn)16進(jìn)制數(shù)組,失敗返回-1,成功返回0*/ int ascii2hex(const char *string,int length,uint8_t hex[],int *hexlen) { char src_arr[length+2];/*奇數(shù)個(gè)字符首位補(bǔ)‘0’,字符串結(jié)束符'\0',所以是+2*/ int src_len=0,i; char ah,al; uint8_t ih,il; if(string == NULL || hex == NULL || length <1 || hexlen == NULL){ return -1; } memset(src_arr,0x00,sizeof(src_arr)); memcpy(src_arr,string,length); if(trim(src_arr) == NULL) return -1; src_len = strlen(src_arr); if(src_len%2){ *hexlen = src_len/2 + 1; memmove(&src_arr[1],&src_arr[0],src_len); src_arr[0] = '0'; }else{ *hexlen = src_len/2; } for(i = 0;i < *hexlen;i++){ ah = src_arr[2*i]; al = src_arr[2*i+1]; ih = (ah > '9') ? (toupper(ah) - 'A' + 10):(ah - '0'); il = (al > '9') ? (toupper(al) - 'A' + 10):(al - '0'); hex[i] = ih * 16 + il; } return 0; } /*16進(jìn)制轉(zhuǎn)ascii ,失敗返回-1,成功返回0*/ int hex2ascii(uint8_t *src, char dest[], int len) { uint8_t dh,dl; //字符串的高位和低位 int i; if(src == NULL || dest == NULL || len < 1){ return -1; } for(i = 0; i < len; i++){ dh = src[i] / 16; dh = (dh > 9) ? (dh-10+'A'):(dh + '0'); dl = src[i] % 16; dl = (dl > 9) ? (dl-10+'A'):(dl + '0'); dest[2*i] = dh; dest[2*i+1] = dl; } dest[2*i] = '\0'; return 0; }
看完上述內(nèi)容,你們對如何實(shí)現(xiàn)linux下ASCII轉(zhuǎn)HEX有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。