C语言中将字符数组转换成十六进制字符串

文章讲述了如何使用C语言分别在动态和静态内存环境下,实现将字符数组转化为十六进制字符串的函数array_to_hex,展示了两种内存管理方式下的代码实现和功能测试。
摘要由CSDN通过智能技术生成

动态申请内存版

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 定义一个函数,用于将一个字符转化为十六进制表示
char* char_to_hex(char c) {
    // 创建一个长度为 3 的字符串,用于存储结果
    char* hex = (char*)malloc(3 * sizeof(char));
    // 使用 sprintf 函数,将字符 c 的 ASCII 码转化为十六进制,并存储在 hex 中
    sprintf(hex, "%02x", c);
    // 返回 hex
    return hex;
}

// 定义一个函数,用于将一个字符数组转化为十六进制字符串
char* array_to_hex(char* array, int size) {
    // 创建一个长度为 2 * size + 1 的字符串,用于存储结果
    char* hex = (char*)malloc((2 * size + 1) * sizeof(char));
    // 初始化 hex 为空字符串
    hex[0] = '\0';
    // 遍历字符数组中的每个元素
    for (int i = 0; i < size; i++) {
        // 调用 char_to_hex 函数,将当前元素转化为十六进制
        char* temp = char_to_hex(array[i]);
        // 将转化后的十六进制字符串追加到 hex 中
        strcat(hex, temp);
        // 如果不是最后一个元素,还要在 hex 中加入一个空格
        if (i < size - 1) {
            strcat(hex, " ");
        }
        // 释放 temp 的内存
        free(temp);
    }
    // 返回 hex
    return hex;
}

// 定义一个主函数,用于测试
int main() {
    // 创建一个字符数组,用于存储输入
    char array[] = {0x55, 0xaa};
    // 获取字符数组的长度
    int size = sizeof(array) / sizeof(array[0]);
    // 调用 array_to_hex 函数,将字符数组转化为十六进制字符串
    char* hex = array_to_hex(array, size);
    // 打印结果
    printf("The hexadecimal string is: %s\n", hex);
    // 释放 hex 的内存
    free(hex);
    // 返回 0
    return 0;
}

静态内存版

#include <stdio.h>
#include <string.h>

// 定义一个函数,用于将一个 unsigned char 转化为十六进制表示,并存储在一个给定的字符串中
void char_to_hex(unsigned char c, char* hex) {
    // 定义一个字符数组,用于存储十六进制的数字
    char digits[] = "0123456789abcdef";
    // 使用位运算,将 unsigned char 的高四位和低四位分别提取出来
    int high = (c >> 4) & 0x0f;
    int low = c & 0x0f;
    // 使用字符数组,将高四位和低四位分别转化为对应的十六进制字符,并存储在 hex 中
    hex[0] = digits[high];
    hex[1] = digits[low];
    // 在 hex 的末尾加上一个空字符,表示字符串的结束
    hex[2] = '\0';
}

// 定义一个函数,用于将一个 unsigned char 数组转化为十六进制字符串,并存储在一个给定的字符串中
void array_to_hex(unsigned char* array, int size, char* hex) {
    // 初始化 hex 为空字符串
    hex[0] = '\0';
    // 遍历 unsigned char 数组中的每个元素
    for (int i = 0; i < size; i++) {
        // 创建一个长度为 3 的字符串,用于存储当前元素的十六进制表示
        char temp[3];
        // 调用 char_to_hex 函数,将当前元素转化为十六进制,并存储在 temp 中
        char_to_hex(array[i], temp);
        // 将转化后的十六进制字符串追加到 hex 中
        strcat(hex, temp);
        // 如果不是最后一个元素,还要在 hex 中加入一个空格
        if (i < size - 1) {
            strcat(hex, " ");
        }
    }
}

// 定义一个主函数,用于测试
int main() {
    // 创建一个 unsigned char 数组,用于存储输入
    unsigned char array[] = {0x55, 0xaa};
    // 获取 unsigned char 数组的长度
    int size = sizeof(array) / sizeof(array[0]);
    // 创建一个长度为 2 * size + 1 的字符串,用于存储转化后的十六进制字符串
    char hex[2 * size + 1];
    // 调用 array_to_hex 函数,将 unsigned char 数组转化为十六进制字符串,并存储在 hex 中
    array_to_hex(array, size, hex);
    // 打印结果
    printf("The hexadecimal string is: %s\n", hex);
    // 返回 0
    return 0;
}

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值