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

咨询C语言读取含0-255扩展ASCII字符文件的实现方法

嘿,针对你读取包含四个0-255范围扩展ASCII字符的文件需求,我给你整理几个实用的C语言实现方法,包括改进你之前用的fscanf方案:

方法1:用fgetc逐个读取字符

fgetc是最稳妥的方式之一,它每次读取一个字节,返回值是int类型(既能表示0-255的字符,也能区分EOF),完全适配扩展ASCII的范围。记得一定要用二进制模式打开文件,避免Windows系统下的换行符转换问题。

#include <stdio.h>

int main() {
    FILE *fp = fopen("target_file.bin", "rb"); // rb表示二进制只读模式
    if (!fp) {
        perror("Failed to open file");
        return 1;
    }

    unsigned char chars[4]; // 用unsigned char存,避免符号扩展问题
    int read_count = 0;

    while (read_count < 4) {
        int c = fgetc(fp);
        if (c == EOF) {
            printf("文件长度不足,只读到了%d个字符\n", read_count);
            break;
        }
        chars[read_count] = (unsigned char)c;
        printf("第%d个字符的ASCII值:%d\n", read_count + 1, chars[read_count]);
        read_count++;
    }

    fclose(fp);
    return 0;
}
方法2:用fread一次性读取全部字符

如果确定文件正好包含4个字符,fread会更高效,直接把整个文件内容读到数组里:

#include <stdio.h>

int main() {
    FILE *fp = fopen("target_file.bin", "rb");
    if (!fp) {
        perror("Failed to open file");
        return 1;
    }

    unsigned char chars[4];
    size_t actual_read = fread(chars, sizeof(unsigned char), 4, fp);

    if (actual_read != 4) {
        printf("只成功读取了%zu个字符,文件可能过短\n", actual_read);
    } else {
        for (int i = 0; i < 4; i++) {
            printf("第%d个字符的ASCII值:%d\n", i + 1, chars[i]);
        }
    }

    fclose(fp);
    return 0;
}
改进版:用fscanf读取的注意事项

如果你坚持想用fscanf,要注意格式符的选择——默认的%c会跳过空白字符(比如空格、换行),如果你的文件包含这类字符会出错。推荐用%hhu格式符直接读取到unsigned char,或者用%d读取到int后再转换:

#include <stdio.h>

int main() {
    FILE *fp = fopen("target_file.bin", "rb");
    if (!fp) {
        perror("Failed to open file");
        return 1;
    }

    unsigned char chars[4];
    int i;
    for (i = 0; i < 4; i++) {
        // %hhu 专门用于读取unsigned char类型
        if (fscanf(fp, "%hhu", &chars[i]) != 1) {
            printf("读取第%d个字符失败\n", i + 1);
            break;
        }
        printf("第%d个字符的ASCII值:%d\n", i + 1, chars[i]);
    }

    fclose(fp);
    return 0;
}

⚠️ 注意:如果文件中包含空白字符(比如ASCII 32空格、ASCII 0空字符),fscanf会跳过它们,导致读取结果不符合预期,这种情况下优先用前两种方法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:10:31