shlu's note

字节互转HEX

#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