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

如何以十六进制形式输出ASCII?AES加密结果输出至屏幕与文件

嘿,你的AES加密已经正常跑通了,这太棒了!针对你要把加密结果同时输出到屏幕和TXT文件,以及以十六进制形式输出ASCII的需求,我给你整理了具体的实现方案:

1. 同时输出加密结果到屏幕与TXT文件

你现有的验证循环已经能正确输出十六进制加密结果,只需要在循环里同时写入文件即可。这里有两种常用方式:

方式一:循环中实时双输出

直接在你的现有循环里,同时调用printf(输出到屏幕)和fprintf(输出到文件),格式保持一致:

// 先打开目标文件,记得检查是否成功打开
FILE *output_file = fopen("encrypted_result.txt", "w");
if (output_file == NULL) {
    perror("Failed to open output file");
    return 1; // 处理打开失败的情况
}

// 你的加密结果输出循环,修改为同时输出到屏幕和文件
for (int j = 0; j < object.words * 4; j++) {
    // 输出到控制台
    printf("%02x ", Encryptor.out[j]);
    // 输出到TXT文件,格式和屏幕完全一致
    fprintf(output_file, "%02x ", Encryptor.out[j]);
}

// 补充换行,让输出更整洁
printf("\n");
fprintf(output_file, "\n");

// 记得关闭文件,避免资源泄漏
fclose(output_file);

方式二:先拼接成字符串再一次性输出

如果加密数据量较大,先把所有十六进制内容拼接成一个字符串,再一次性输出到屏幕和文件会更高效:

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

// 计算所需的字符串长度:每个字节占2个十六进制字符+1个空格,最后加换行和结束符
int output_byte_count = object.words * 4;
char *hex_result = malloc(output_byte_count * 3 + 2);
if (hex_result == NULL) {
    perror("Failed to allocate memory");
    return 1;
}

char *str_ptr = hex_result;
for (int j = 0; j < output_byte_count; j++) {
    // 逐个拼接十六进制字符
    str_ptr += sprintf(str_ptr, "%02x ", Encryptor.out[j]);
}
// 把最后一个空格替换成换行,让格式更规范
hex_result[strlen(hex_result) - 1] = '\n';

// 输出到屏幕
printf("%s", hex_result);

// 输出到文件
FILE *output_file = fopen("encrypted_result.txt", "w");
if (output_file != NULL) {
    fprintf(output_file, "%s", hex_result);
    fclose(output_file);
}

// 释放分配的内存
free(hex_result);
2. 以十六进制形式输出ASCII文本

如果你需要把原始ASCII文本(比如你的待加密字符串"im so glad this works")转换成十六进制形式输出,可以用下面的代码:

char plaintext[] = "im so glad this works";

// 输出到屏幕
printf("Plaintext in hex: ");
for (int i = 0; plaintext[i] != '\0'; i++) {
    // 强制转成unsigned char,避免ASCII扩展字符被当成负数处理
    printf("%02x ", (unsigned char)plaintext[i]);
}
printf("\n");

// 同时输出到文件的话,同样用fprintf
FILE *plaintext_hex_file = fopen("plaintext_hex.txt", "w");
if (plaintext_hex_file != NULL) {
    fprintf(plaintext_hex_file, "Plaintext in hex: ");
    for (int i = 0; plaintext[i] != '\0'; i++) {
        fprintf(plaintext_hex_file, "%02x ", (unsigned char)plaintext[i]);
    }
    fprintf(plaintext_hex_file, "\n");
    fclose(plaintext_hex_file);
}

小提示

  • 打开文件时,"w"模式会覆盖原有文件内容,如果需要追加内容可以改用"a"模式
  • 所有文件操作后一定要记得调用fclose()关闭文件,避免资源泄漏
  • 内存分配后要记得用free()释放,防止内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:51:16