用C将字符串的十六进制值写入外部文件

问题描述

我需要将 A 字符串中每个字符的十六进制值写入外部文件,每个字符在不同的行上。

例如,如果我有这个字符串

“am+ij”

外部文件应如下所示:

061
06D
02B
069
06A

我怎么能做这样的事情? (对不起,如果问题写得不好,我想不出任何其他方式来解释我需要做什么)

解决方法

我已在评论中概述了该过程。在 C 中,字符被 unsigned char 等所有字符函数视为 int 强制转换为 getchar()。因此,在读取字符后,您只需将其以十六进制格式写出即可。对于任何值,无论您将其视为十进制、八进制还是十六进制,数字都不会改变,这只是您选择的表示方式。因此,当您读取字符 'a' 时,它具有 97 十进制或 61 十六进制的 ASCII Value,而 'm' 具有 109 的 ASCII 值十进制或 6d 十六进制。

您只想读取每个字符(实际上是读取其 ASCII 值),然后以十六进制格式输出。你用 printf()/fprintf() 做到这一点。因此,在这种情况下,您只需声明一个 int,然后读取将其分配给变量的每个字符,然后将变量以十六进制格式(用 字段填充的格式零填充 - 3 的宽度)。您可以使用转换说明符 "%03x" 来实现 06d 之类的输出,或者如果您希望十六进制字符为大写,则使用 "%03X",例如06D

stdin 读取并写入 stdout 的最小示例可以是:

#include <stdio.h>

int main (void) {
    
    int c;
    
    fputs ("enter string: ",stdout);
    
    while ((c = getchar()) != '\n' && c != EOF)
        printf ("%03x\n",c);
}

示例使用/输出

$ ./bin/readwrite_char2hex
enter string: am+ij
061
06d
02b
069
06a

这将让您打开文件并使用 fscanf() 以及选择输出十六进制数字的大小写。检查一下,如果您有其他问题,请告诉我。