问题描述
我需要将 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()
以及选择输出十六进制数字的大小写。检查一下,如果您有其他问题,请告诉我。