C语言字符串如何转十六进制?

99ANYc3cd6
预计阅读时长 11 分钟
位置: 首页 C语言 正文

方法1:逐个字符转换为十六进制(推荐)

这种方法适用于将字符串中的每个字符转换为对应的十六进制表示(ASCII码的十六进制形式)。

c语言字符串转换为十六进制
(图片来源网络,侵删)

代码示例:

#include <stdio.h>
#include <string.h>
void string_to_hex(const char *str, char *hex_str) {
    int i;
    for (i = 0; str[i] != '\0'; i++) {
        sprintf(&hex_str[i * 2], "%02X", (unsigned char)str[i]);
    }
    hex_str[i * 2] = '\0'; // 添加字符串结束符
}
int main() {
    const char *input_str = "Hello";
    char hex_output[2 * strlen(input_str) + 1]; // 每个字符2个十六进制位 + '\0'
    string_to_hex(input_str, hex_output);
    printf("Original: %s\n", input_str);
    printf("Hex: %s\n", hex_output);
    return 0;
}

输出:

Original: Hello
Hex: 48656C6C6F

说明:

  1. sprintf 用于将每个字符的ASCII码格式化为两位十六进制(%02X)。
  2. (unsigned char) 确保字符被正确解释为无符号值,避免符号扩展问题。
  3. hex_str 的大小需要是输入字符串长度的2倍(每个字符2个十六进制位)加上1(\0)。

方法2:将整个字符串视为字节数组转换为十六进制

如果字符串是二进制数据的文本形式(如 "48656C6C6F"),可以直接将其转换为十六进制字节流。

代码示例:

#include <stdio.h>
#include <string.h>
void hex_to_string(const char *hex_str, char *output) {
    int len = strlen(hex_str);
    for (int i = 0; i < len; i += 2) {
        sscanf(&hex_str[i], "%2hhx", &output[i / 2]);
    }
    output[len / 2] = '\0';
}
int main() {
    const char *hex_str = "48656C6C6F";
    char output[strlen(hex_str) / 2 + 1];
    hex_to_string(hex_str, output);
    printf("Hex: %s\n", hex_str);
    printf("String: %s\n", output);
    return 0;
}

输出:

Hex: 48656C6C6F
String: Hello

说明:

  1. sscanf 从十六进制字符串中解析每个字节(%2hhx)。
  2. 输出字符串的长度是输入十六进制字符串长度的一半(每两个字符表示一个字节)。

方法3:使用位操作手动转换

如果不希望依赖 sprintfsscanf,可以手动实现转换逻辑。

代码示例:

#include <stdio.h>
char char_to_hex(char c) {
    if (c >= 0 && c <= 9) return c + '0';
    else return c - 10 + 'A';
}
void string_to_hex_manual(const char *str, char *hex_str) {
    int i;
    for (i = 0; str[i] != '\0'; i++) {
        unsigned char byte = str[i];
        hex_str[i * 2] = char_to_hex(byte / 16);
        hex_str[i * 2 + 1] = char_to_hex(byte % 16);
    }
    hex_str[i * 2] = '\0';
}
int main() {
    const char *input_str = "Hello";
    char hex_output[2 * strlen(input_str) + 1];
    string_to_hex_manual(input_str, hex_output);
    printf("Original: %s\n", input_str);
    printf("Hex: %s\n", hex_output);
    return 0;
}

输出:

Original: Hello
Hex: 48656C6C6F

说明:

  1. char_to_hex 将0-15的值转换为十六进制字符('0'-'9'或'A'-'F')。
  2. 通过除法和取模运算分离高4位和低4位,分别转换为两个十六进制字符。

方法 适用场景 优点 缺点
方法1sprintf 将字符串的ASCII码转为十六进制 简单直接 依赖标准库函数
方法2sscanf 将十六进制字符串转为原始字符串 适合解析十六进制数据 输入必须是合法的十六进制
方法3(手动转换) 需要避免标准库函数时 灵活,无依赖 代码稍复杂

根据需求选择合适的方法,如果只是简单转换,方法1是最推荐的。

c语言字符串转换为十六进制
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
织梦v5.7标签手册有哪些实用标签?
« 上一篇 今天
dede如何获取当前路径?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]