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;
}

代码解释:

  1. 将两个16进制字符看做一个字符:

    • 循环遍历字符串,每次取两个字符并存入临时数组temp中。
    • 使用strtol函数将temp中的16进制字符转换为10进制整数,并存入new_str数组中。
  2. 将一个字符拆分成两个字符:

    • 循环遍历字符串,每次取一个字符。
    • 使用sprintf函数将字符转换为两个16进制字符,并存入original_str数组中。

总结:

上述代码示例演示了如何使用C语言实现将字符串中的两个16进制字符看做一个字符,再将一个字符拆分成两个字符,实现字符串的16进制转换和还原。代码包含详细的注释,方便理解和学习。

相关知识点:

  • strlen函数:用于获取字符串长度。
  • strtol函数:用于将字符串转换为长整型。
  • sprintf函数:用于格式化字符串输出。
  • %02x格式:用于将整数以两位16进制形式输出,不足两位前面补0。
  • (unsigned char):强制类型转换,将字符转换为无符号字符。

希望本文能够帮助您更好地理解C语言字符串16进制转换的实现过程。

C语言字符串16进制转换:将两个字符看做一个字符,再拆分成两个字符

原文地址: https://www.cveoy.top/t/topic/nTmG 著作权归作者所有。请勿转载和采集!

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