c语言将字符串中两个16进制字符看做一个字符再将一个字符拆分成两个字符复原回原字符串;给出具体实现过程和注释
#include <stdio.h> #include <string.h>
int main() { char str[] = "48656c6c6f20576f726c64"; // 原始字符串 int len = strlen(str); // 获取字符串长度 char new_str[len/2 + 1]; // 用于存放新字符串的数组,长度为原字符串长度的一半加1 int i, j = 0; // i为原字符串的下标,j为新字符串的下标
for (i = 0; i < len; i += 2) // 每次跨过两个字符
{
char temp[3] = {str[i], str[i+1], '\0'}; // 将两个字符存入临时数组中
int num = strtol(temp, NULL, 16); // 将临时数组中的16进制字符转换为10进制整数
new_str[j++] = (char)num; // 将转换后的整数存入新字符串中
}
new_str[j] = '\0'; // 新字符串最后一个字符为'\0'
printf("新字符串为:%s\n", new_str); // 输出新字符串
char original_str[len + 1]; // 用于存放还原后的原始字符串的数组,长度为原字符串长度加1
j = 0; // 还原后的原始字符串的下标
for (i = 0; i < len; i++) // 每次读取一个字符
{
sprintf(&original_str[j], "%02x", (unsigned char)str[i]); // 将字符转换为两个16进制字符存入还原后的原始字符串中
j += 2; // 下标移动2位
}
original_str[j] = '\0'; // 还原后的原始字符串最后一个字符为'\0'
printf("还原后的原始字符串为:%s\n", original_str); // 输出还原后的原始字符串
return 0;
原文地址: https://www.cveoy.top/t/topic/eBJP 著作权归作者所有。请勿转载和采集!