#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
char *to_hex(const uint8_t *buf, uint32_t size) {
char*hex_char="0123456789abcdef";
uint8_t hv,lh;
char * ret= malloc(size*2+1);
*(ret+size*2)='\0';
for (int i = 0,j=0; i < size; ++i,j+=2) {
hv=(*(buf+i)&0xf0)>>4;
lh=*(buf+i)&0x0f;
*(ret+j)=*(hex_char+hv);
*(ret+j+1)=*(hex_char+lh);
}
return ret;
}
void to_bytes(char*hex,uint8_t **bytes,uint32_t* size){
char*hex_char="0123456789abcdefABCDEF";
size_t hex_len=strlen(hex);
*bytes= malloc(hex_len/2);
*size=hex_len/2;
uint8_t hi,li;
for (int i = 0; i < *size; ++i) {
hi=strchr(hex_char,*(hex+i*2))-hex_char;
li=strchr(hex_char,*(hex+i*2+1))-hex_char;
hi=hi>15?(hi-6):hi;
li=li>15?(li-6):li;
*(*bytes+i)=(hi<<4)|li;
}
}
别忘了用完释放hex
声明:转载请注明出处,原文地址:shlu's note