0

私は現在Cを勉強していて、生のレジストリファイルを解析して読んでいます。

私は今いくつかの問題を抱えています、

000011E0    00 00 00 00 60 01 00 00 B9 01 00 00 00 00 00 00 
000011F0    20 C0 26 00 FF FF FF FF 00 00 00 00 FF FF FF FF 
00001200    10 FC 00 00 FF FF FF FF 4C 00 01 00 00 00 00 00
this is hex value of REGISTRY file.

fseek(fp,0x11F0,SEEK_SET);

char tmp[4];
int now = ftell(fp);
for(int i = 0 ; i < 4 ; i++){
    tmp[i] = fgetc(fp);
    }

このtmp配列を作成しましたが、0x0026c020が必要です。この配列をその値に変更するにはどうすればよいですか?または、より良いアルゴリズムを提案してください。

ありがとう。

4

2 に答える 2

2

値がホストOSアーキテクチャと同じエンディアンで格納されていることがわかっている場合は、次のようにすることができます。

int value = *(int *)tmp;

ただし、ここで行うように、バイトを逆の順序で読み取ることはできません。これにより、エンディアンが変更され、誤った値になります。これを試して:

int value;
if (fread(&value, sizeof(value), 1, fp) != 1) {
    /* Could not read, handle error. */
}

/* value is set, inspect it */
于 2012-07-17T04:21:51.920 に答える
0

文字列を整数に変換するために、すでに利用可能な関数があります。そのような関数の1つがstrtoul()です。

標準のstrtoul()関数を使用して、文字列を整数値に変換できます。

于 2012-07-17T04:57:12.437 に答える