如何在C中遇到某个字符之前读取字节

时间:2014-01-11 05:16:21

标签: c io c99

我想要读取一个字节字符串以供C中的字符表处理,直到遇到一个字符(0xFF)。基本上,我正在创建一个函数,该函数应该使用静态二进制文件处理文本,该文件使用自定义字符集为ANSI。

我的代码如下:

short ReadText(char * Path, char * Offset) {
    //Declare variables
    size_t ReadResult;
    FILE * OpenedFile;
    short Position;
    char CurrentChar;
    char FormattedChar;
    char * FileContents;

    //Populate variables
    OpenedFile = fopen(Path, "r");

    do { 
        // >>> Code to gather bytes <<<
    }
    //Initiate character conversion
    do {
        fseek(OpenedFile, Position, SEEK_SET);
        CurrentChar = fread(

        //Character switch I/O
        switch(CurrentChar) {enter code here
            case 0x00: FormattedChar = ' ';
            case 0x01: FormattedChar = 'À';
            case 0x02: FormattedChar = 'Á';
            case 0x03: FormattedChar = 'Â';
            // . . .
        }
    }
}

我需要知道的是将偏移量中的字节读取到char*,直到遇到原始字符集的终止字节(0xFF)。我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

我认为您只需要像feof(FILE *)那样添加一个电话,

fseek(OpenedFile, Position, SEEK_SET);
if (feof(OpenedFile) != 0) {
  /* end of the file. */
} else {
  /* safe to read. */
}

答案 1 :(得分:0)

您好,你可能想要这个,

short ReadText(char * Path, short Offset)
{
    //Declare variables
    size_t ReadResult;
    FILE * OpenedFile;
    short Position;
    int byte;
    unsigned char CurrentChar;
    char FormattedChar;
    char * FileContents;

    //Populate variables
    OpenedFile = fopen(Path, "r");

    if (OpenedFile == NULL)
    {
        printf("---File not exist----\n");
        return;
     }

     fseek(OpenedFile, Offset, SEEK_SET);

     while(1)
     {
         unsigned int number;
         byte = fscanf(OpenedFile,"%x",&number);

         printf("read ::%x\n",number);


        switch(number) 
        {
            case 0x00: FormattedChar = ' ';break;
            case 0x01: FormattedChar = 'À';break;
            case 0x02: FormattedChar = 'Á';break;
            case 0x03: FormattedChar = 'Â';break;
            ....................................
            ....................................
        }

        if(number == 0xFF)
            break;
    }

    fclose(OpenedFile);
}

答案 2 :(得分:0)

通过声明目标缓冲区及其大小在ReadText()之外来建议处理缓冲区。创建一个简单的循环并重复调用fgetc()并确保将其结果放在int中以测试EOF并设置翻译。除非只有几个字节要翻译,而不是switch,否则简单地添加一个256字节的翻译数组。请注意,int CurrentChar的{​​{1}}值为0-255。

fgetc()