验证C中的文件

时间:2015-10-27 14:01:40

标签: c

我需要为我正在制作的游戏验证加载文件,并且我遇到了麻烦:

我只需要知道第一个字符是否是某个范围内的int,如果下一个字符是unsigned short int(检查每个字符的类型和值),我就找不到函数此

另外,我需要检查第n个字符是否是文件中的最后一个字符(如果不是则返回一些错误代码)。

该文件是二进制类型。

我该如何解决这个问题?

谢谢!

E:

这是我的加载文件功能:

Cod_Error load(Info * gameInfo)
{
    FILE * loadFile;
    unsigned short int dif;
    int i;


    randomizeSeed();

    gameInfo ->undo = FALSE;

    loadFile = fopen(gameInfo->fileArchivo, "rb");


    fread(&dif, sizeof(dif), 1, loadFile);

    gameInfo->size = sizeFromDif(dif);
    gameInfo->undoPossible = FALSE;

    gameInfo->board = newBoard(gameInfo->size);
    if(gameInfo->board == NULL)
        return ERROR_MEM;

    fread(&(gameInfo->score), sizeof(Score), 1, loadFile);

    fread(&(gameInfo->undos), sizeof(unsigned short int), 1, loadFile);

    for(i = 0; i < gameInfo->size; i++)
        fread(gameInfo->board[i], sizeof(Tile), gameInfo->size, loadFile);

    fclose(loadFile);

    return OK;
}

1 个答案:

答案 0 :(得分:2)

简答:你不能。

长答案:

在二进制文件中,没有指定二进制数据表示的内容。该规范必须来自读取文件的程序的开发人员。例如,让我们从任意文件中获取2个字节。

  

00101101 00110111

现在,这完全取决于读取这些字节的程序。您可以尝试将其作为int读取,如果解释为int,则检查它是否有意义(i.E在某个范围内),并且您可以对任何其他二进制数据组合与任何其他数据类型执行相同操作。但你肯定无法分辨出用于将其写入文件的数据类型,就像现在它只是二进制文件一样。

引用@ M.Oehm:

  

你不能读4个字节然后说'#34;哦,它们是浮点数&#34;。

然而,你可以说,

  

&#34;如果我将它们视为浮点数,它们是否在指定的范围内   设定&#34;