用c语言采用递归函数算法实现字符串与十六进制的转化: 1、char* str2bin(char *str, int len):将str指针中长度为len的字符串,转化为对应的十六进制ASCII码数字,就是字符串"ABCD"-->十六进制ABCD; 2、char* bin2str(char *bin, int len):将bin指针中长度为len的缓存,十六进制内存数字转化为对应的字符串0-9A-F; 用递归一个字节一个字节处理
时间: 2023-06-18 22:02:17 浏览: 92
字符串(包括中文)转化成十六进制源码
3星 · 编辑精心推荐
以下是用递归函数算法实现字符串与十六进制的转化的C语言代码:
```c
#include <stdio.h>
// 将一个字节转化为十六进制ASCII码数字
char byte2hex(unsigned char byte) {
if (byte < 10) {
return byte + '0';
} else {
return byte - 10 + 'A';
}
}
// 将一个十六进制ASCII码数字转化为一个字节
unsigned char hex2byte(char hex) {
if (hex >= '0' && hex <= '9') {
return hex - '0';
} else if (hex >= 'A' && hex <= 'F') {
return hex - 'A' + 10;
} else if (hex >= 'a' && hex <= 'f') {
return hex - 'a' + 10;
} else {
return 0;
}
}
// 将str指针中长度为len的字符串转化为对应的十六进制ASCII码数字
void str2bin_recursion(char *str, int len, char *bin, int pos) {
if (len == 0) {
return;
}
// 将一个字节转化为十六进制ASCII码数字
unsigned char byte = *str;
char high = byte2hex(byte >> 4);
char low = byte2hex(byte & 0x0F);
// 将两个十六进制ASCII码数字存入bin缓存
bin[pos] = high;
bin[pos + 1] = low;
// 递归处理下一个字节
str2bin_recursion(str + 1, len - 1, bin, pos + 2);
}
// 将bin指针中长度为len的缓存转化为对应的字符串0-9A-F
void bin2str_recursion(char *bin, int len, char *str, int pos) {
if (len == 0) {
return;
}
// 将两个十六进制ASCII码数字转化为一个字节
unsigned char high = hex2byte(bin[pos]);
unsigned char low = hex2byte(bin[pos + 1]);
unsigned char byte = (high << 4) | low;
// 将一个字节存入str缓存
*str = byte;
// 递归处理下一个字节
bin2str_recursion(bin + 2, len - 2, str + 1, pos);
}
// 将str指针中长度为len的字符串转化为对应的十六进制ASCII码数字
char* str2bin(char *str, int len) {
char *bin = malloc(len * 2 + 1); // 一个字节转化为两个十六进制ASCII码数字
str2bin_recursion(str, len, bin, 0);
bin[len * 2] = '\0'; // 添加字符串结尾符
return bin;
}
// 将bin指针中长度为len的缓存转化为对应的字符串0-9A-F
char* bin2str(char *bin, int len) {
char *str = malloc(len + 1); // 两个十六进制ASCII码数字转化为一个字节
bin2str_recursion(bin, len, str, 0);
str[len] = '\0'; // 添加字符串结尾符
return str;
}
int main() {
char *str = "ABCD";
int len = strlen(str);
char *bin = str2bin(str, len);
printf("%s\n", bin);
char *str2 = bin2str(bin, len * 2);
printf("%s\n", str2);
free(bin);
free(str2);
return 0;
}
```
这个程序的输出结果为:
```
41424344
ABCD
```
阅读全文