You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中将十六进制文本文件还原为原始JPEG图片

把十六进制文本还原为JPEG图片的C语言实现

你之前的代码直接把imgHex.txt里的十六进制字符串原样写入JPEG文件,这肯定行不通——文本里的FF是两个ASCII字符(对应字节0x46和0x46),但原始JPEG里对应的是单个二进制字节0xFF。必须把每两个十六进制字符转换成一个二进制字节,再写入文件才能还原图片。

实现思路

  1. 打开十六进制文本文件(只读模式)和目标JPEG文件(二进制写入模式)
  2. 逐字符读取文本内容,跳过换行、空格这类非十六进制字符
  3. 每收集两个有效十六进制字符,将其合并转换成一个二进制字节
  4. 把转换后的字节写入JPEG文件
  5. 加入错误检查,避免文件打开失败等异常情况

完整代码示例

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

// 将单个十六进制字符转换为对应数值(0-15)
int hex_char_to_val(char c) {
    if (isdigit(c)) {
        return c - '0';
    } else if (isupper(c)) {
        return 10 + (c - 'A');
    } else if (islower(c)) {
        return 10 + (c - 'a');
    }
    return -1; // 返回-1表示无效字符
}

int main() {
    FILE* hex_file;
    FILE* jpeg_file;
    errno_t err;

    // 打开十六进制文本文件
    err = fopen_s(&hex_file, "C:\\Users\\name\\Documents\\imgHex.txt", "r");
    if (err != 0) {
        printf("无法打开imgHex.txt文件\n");
        return 1;
    }

    // 打开目标JPEG文件(二进制写入)
    err = fopen_s(&jpeg_file, "C:\\Users\\name\\Documents\\test.jpeg", "wb");
    if (err != 0) {
        printf("无法创建test.jpeg文件\n");
        fclose(hex_file);
        return 1;
    }

    char c;
    int byte_val = 0;
    int nibble_count = 0; // 记录已读取的半字节数(0或1)

    // 逐字符处理十六进制文本
    while ((c = fgetc(hex_file)) != EOF) {
        int val = hex_char_to_val(c);
        if (val == -1) {
            continue; // 跳过无效字符(如换行、空格)
        }

        if (nibble_count == 0) {
            // 第一个半字节,左移4位预留低位空间
            byte_val = val << 4;
            nibble_count = 1;
        } else {
            // 第二个半字节,合并成完整字节
            byte_val |= val;
            // 将字节写入JPEG文件
            fputc(byte_val, jpeg_file);
            nibble_count = 0;
        }
    }

    // 关闭文件
    fclose(hex_file);
    fclose(jpeg_file);

    printf("图片还原完成\n");
    return 0;
}

代码关键点说明

  • hex_char_to_val函数:统一处理大小写十六进制字符,转换成对应数值
  • 跳过非十六进制字符:兼容带换行、空格的hex文本文件
  • 半字节合并:确保每两个十六进制字符对应一个二进制字节,完全匹配原始图片的字节结构
  • 错误检查:避免文件打开失败导致的程序崩溃

内容的提问来源于stack exchange,提问作者thimo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 08:15:29