c语言把16进制文本转16进制数组

直接上代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>


void str2hex(unsigned char* value,int len,unsigned char* out);

int main(){
    unsigned char *str = "81709944E0CB2E1DB5B0A477D18539B";
    unsigned char out[16];
    str2hex(str,32,out);
    int i;
	/*
    for ( i = 0; i < 32; i++)
    {
        printf("%02x ",str[i]);
    }
    printf("\n");
	*/
    for ( i = 0; i < 16; i++)
    {
        printf("%02x ",out[i]);
    }
    printf("\n");
}

void str2hex(unsigned char* value,int len,unsigned char* out){
    int i;
    int j = 0;
    unsigned int HIGH_BYTE;
    unsigned int LOW_BYTE;
    for ( i = 0; i < len; i+=2)
    {    //high 4
         if (value[i]>=0x30 && value[i]<=0x39){
             //printf("high1 = %d \n",value[i]-0x30);
			 //printf("%d \n",value[i]-0x30);
             HIGH_BYTE = value[i]-0x30;
         }else if (value[i]>=0x41 && value[i]<=0x46)
         {
			 //printf("high2 = %d \n",value[i]);
            //  printf("%d ",value[i]-0x37);
             HIGH_BYTE = value[i]-0x37;
         }else if (value[i]>=0x61 && value[i]<=0x66)
         {
			 //printf("high3 = %d \n",value[i]);
            //  printf("%d ",value[i]-0x57);
             HIGH_BYTE = value[i]-0x57;
         }
         
         //low 4
         if (value[i+1]>=0x30 && value[i+1]<=0x39){
             // printf("%d \n",value[i+1]-0x30);
             LOW_BYTE = value[i+1]-0x30;
         }else if (value[i+1]>=0x41 && value[i+1]<=0x46)
         {
            //  printf("%d ",value[i+1]-0x37);
             LOW_BYTE = value[i+1]-0x37;
         }else if (value[i+1]>=0x61 && value[i+1]<=0x66)
         {
            //  printf("%d ",value[i+1]-0x57);
             LOW_BYTE = value[i+1]-0x57;
         }

         out[j] = (HIGH_BYTE<<4) + LOW_BYTE;
         j++;
    }          
}

运行结果

运行平台 https://c.runoob.com/compile/11/

 

 

转载地址https://blog.51cto.com/u_15361941/3835298

posted @ 2022-04-01 16:06  平平无奇小辣鸡  阅读(322)  评论(0编辑  收藏  举报