#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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录