【发布时间】:2021-05-08 03:01:38
【问题描述】:
我有一个项目,我应该通过 getchar() 函数接收一个文件并将其中的二进制字符转换为文本。
这是我的代码,它一次只能为一个生成正确的 ASCII 数字。我不知道如何读取整个文本文件的二进制文件并进行转换:
#include <stdio.h>
#include <string.h>
typedef unsigned char byte;
typedef unsigned int uint;
int strbin_to_dec(const char *);
int main(void) {
char * wbin = "01001001";
int c = 0;
printf("%s to ascii %d.\n", wbin, strbin_to_dec(wbin));
printf("The character is %c", strbin_to_dec(wbin));
return 0;
}
int strbin_to_dec(const char * str) {
uint result = 0;
for (int i = strlen(str) - 1, j = 0; i >= 0; i--, j++) {
byte k = str[i] - '0';
k <<= j;
result += k;
}
return result;
}
当我在变量“wbin”中输入一个字符的二进制值时,上面的代码可以工作,但我无法格式化它以接受来自 getchar() 的输入,因为 getchar 给出了一个 int 类型。上面的代码产生了结果:
01001001 to ascii 73.
The character is I
我要翻译的文件如下所示:
0010001001001000011011110111011100100000011011110110011001110100011001010110111000100000011010000110000101110110011001010010000001001001001000000111001101100001011010010110010000100000011101000110111100100000011110010110111101110101
011101000110100001100001011101000010000001110111011010000110010101101110001000000111100101101111011101010010000001101000011000010111011001100101001000000110010101101100011010010110110101101001011011100110000101110100011001010110010000100000011101000110100001100101001000000110100101101101011100000110111101110011011100110110100101100010011011000110010100101100
01110111011010000110000101110100011001010111011001100101011100100010000001110010011001010110110101100001011010010110111001110011001011000010000001101000011011110111011101100101011101100110010101110010001000000110100101101101011100000111001001101111011000100110000101100010011011000110010100101100
01101101011101010111001101110100001000000110001001100101001000000111010001101000011001010010000001110100011100100111010101110100011010000011111100100010
0010110101010011011010010111001000100000010000010111001001110100011010000111010101110010001000000100001101101111011011100110000101101110001000000100010001101111011110010110110001100101001011000010000001010100011010000110010100100000010100110110100101100111011011100010000001001111011001100010000001000110011011110111010101110010
【问题讨论】:
-
您的问题是“如何从文件中读取字符”?事实上,看起来您甚至不需要从文件中读取,而是从重定向的
stdin -
为什么不使用循环?
-
但您希望它只翻译一个字符或整个字符串?
-
@EugeneSh。如果我正确地跟随你,那么这就是我正在做的事情,但我不知道现在如何翻译整个事情。从我使用 FILE 对象可以看出,这与读取文件不同。我是 C 新手,如果我的术语有问题,我深表歉意。
-
@GonçaloBastos 我需要翻译我帖子底部的整个文本块,这是一本书的引述,但我不知道如何遍历二进制文件并获取我想要的内容需要提供给函数。
标签: c binary bitwise-operators