-1

アプリケーションでそれぞれを編集する必要がbyteあり、どこかに保存する必要があります。最初にchar*orを使用unsigned char*しましたが、ゼロを含むより複雑なファイルを読み取ると、すべてが機能しなくなります (ゼロは'\0'文字列の末尾に等しい)。代わりに何を使用すればよいですか?

4

2 に答える 2

4

unsigned char *が適切なデータ型である場合は、別の変数にバイト数を格納するだけで済みます。

文字列/文字ではなく、バイトを扱っていることを常に覚えておいてください。そのため、終了文字列を想定しているため、文字列関数は使用できません。

  • 長さが必要な場合は、それを含む変数を使用してください
  • バイトを比較したい場合は、memcmp代わりに使用しますstrcmp
于 2012-10-27T14:50:19.427 に答える
3

内部にゼロを含むファイル (バイナリ ファイル) をロードする場合は、そのファイルで stat() を使用してファイルのサイズを取得し、インデクサーが次のサイズと同じ値になるまでループで配列に書き込みます。ファイルから 1 を引くか、次の方法を使用します。

struct stat fistat;
//get the size of the file
if(stat("filename",&fistat)<0) {
    printf("file not found\n");
    return 1;
}
// open the file
FILE* file = fopen("filename","r");
if (!file){
    printf("can't open file\n");
    return 1;
}
unsigned char buff[fistat.st_size];
// write the file to buffer
fread(buff,fistat.st_size,1,file);
fclose(file);

このようにbuffして、サイズがfistat.st_size.

于 2012-10-27T14:59:10.130 に答える