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