Linux生成ascii文件,linux下ASCII转HEX的实现

在项目开发过程有时需要对一串数字的16进制文本转换成16进制数组,这是实现方法:

#include

#include

#include

#include /*isspace,toupper的头文件*/

#include /*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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值