C语言字符串16进制转换:将两个字符看做一个字符,再拆分成两个字符
C语言字符串16进制转换:将两个字符看做一个字符,再拆分成两个字符
本文将介绍如何使用C语言实现将字符串中的两个16进制字符看做一个字符,再将一个字符拆分成两个字符,最终实现字符串的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;
}
代码解释:
-
将两个16进制字符看做一个字符:
- 循环遍历字符串,每次取两个字符并存入临时数组
temp中。 - 使用
strtol函数将temp中的16进制字符转换为10进制整数,并存入new_str数组中。
- 循环遍历字符串,每次取两个字符并存入临时数组
-
将一个字符拆分成两个字符:
- 循环遍历字符串,每次取一个字符。
- 使用
sprintf函数将字符转换为两个16进制字符,并存入original_str数组中。
总结:
上述代码示例演示了如何使用C语言实现将字符串中的两个16进制字符看做一个字符,再将一个字符拆分成两个字符,实现字符串的16进制转换和还原。代码包含详细的注释,方便理解和学习。
相关知识点:
strlen函数:用于获取字符串长度。strtol函数:用于将字符串转换为长整型。sprintf函数:用于格式化字符串输出。%02x格式:用于将整数以两位16进制形式输出,不足两位前面补0。(unsigned char):强制类型转换,将字符转换为无符号字符。
希望本文能够帮助您更好地理解C语言字符串16进制转换的实现过程。
原文地址: https://www.cveoy.top/t/topic/nTmG 著作权归作者所有。请勿转载和采集!