十六进制与ascii码互转 C语言实现
1. ascii转16进制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /** * func : char_to_hex() * desc : convert ascii to 16 hex * input : ascii * return: hex */ unsigned char char_to_hex(unsigned char chr) { if((chr>='0')&&(chr<='9')) chr = 0x30+(chr-'0'); else if((chr>='A')&&(chr<='Z'))//capital chr = 0x41+(chr - 'A'); else if((chr>='a')&&(chr<='z'))//little chr = 0x61+(chr-'a'); else chr = 0xff; return chr; } |
2. 16进制转ascii
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /** * func :hex_to_char() * desc :transform hex to ascii * input :hex * return:ascii */ unsigned char hex_to_char(unsigned char hex) { if((hex>=0x30)&&(hex<=0x39)) hex = hex-0x30; else if((hex>=0x41)&&(hex<=0x5A)) // capital hex = 'A' + (hex - 0x41); else if((hex>=0x61)&&(hex<=0x7A)) // little case hex = 'a' + (hex - 0x61); else hex = 0xff; return hex; } |
3. 验证
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | int main(void) { #if 0 unsigned char chr = 'x'; unsigned char hex = 0x45; unsigned char buff = 0xff; buff = hex_to_char(hex); printf("hex_to_char:%c\n", buff); buff = char_to_hex(chr); printf("0x%02x\n",buff); #else unsigned char str[] = "hello"; unsigned char hex[4] = {0x61,0x62,0x41,0x42}; unsigned char buff[32] = {0}; int i,len; len = strlen(str); for(i = 0; i < len; i++) buff[i] =char_to_hex(str[i]); for(i = 0;i < len; i++) printf("char_to_hex:0x%02x\n",buff[i]); for(i = 0; i < 4; i++) buff[i] = hex_to_char(hex[i]); buff[4] = '\0'; printf("hex_to_char:%s\n",buff); #endif return 0; } |
执行结果: