91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現linux下ASCII轉HEX

發布時間:2021-10-22 11:44:40 來源:億速云 閱讀:376 作者:柒染 欄目:互聯網科技

今天就跟大家聊聊有關如何實現linux下ASCII轉HEX,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

在項目開發過程有時需要對一串數字的16進制文本轉換成16進制數組,這是實現方法:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h> /*isspace,toupper的頭文件*/
#include <stdint.h> /*uint8_t的頭文件*/
/*去除數組中的空格*/
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 轉16進制數組,失敗返回-1,成功返回0*/
int ascii2hex(const char *string,int length,uint8_t hex[],int *hexlen)
{
    char src_arr[length+2];/*奇數個字符首位補‘0’,字符串結束符'\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進制轉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;
}

看完上述內容,你們對如何實現linux下ASCII轉HEX有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浦城县| 上虞市| 平凉市| 鹤岗市| 沾益县| 东方市| 吉首市| 包头市| 荣昌县| 宁德市| 澄江县| 蒙城县| 阿巴嘎旗| 古田县| 上虞市| 连州市| 甘孜县| 惠来县| 东方市| 永靖县| 镇巴县| 青海省| 陕西省| 铁岭县| 通辽市| 全州县| 耒阳市| 松桃| 桑日县| 滨州市| 徐水县| 聂拉木县| 富川| 临武县| 四平市| 资阳市| 诏安县| 黄陵县| 曲麻莱县| 横峰县| 八宿县|