2010-11-19 16 views
0

私はReadProcessMemoryを使用していますが、プロセスメモリを読み込みます。私は値3325を含む場所を見ています。しかし、私は16進法ビューアのメモリを見ていて、値はFD0C = 0CFD = 3325として表示されます。だから私はchar配列に値を読み込み、 (atoi)私は迷惑になっています。私はC++を初めて使っていますが、変換を行う関数があるのか​​、それとも自分で書く必要があるのでしょうか(私は気にしません)?ReadProcessMemory char配列、16進数をintに出力

char num_char[16]; 
    _stackstart = _start + 0x28; 
    ReadProcessMemory(hProcess,(void *)_stackstart, &num_char, 4, &lpRead); 
    x = ...some conversion(num_char); 
    if(stack != x) 
    {tell me;} 

答えて

0

atoi 10進数のみで動作します。 strtol代わりに使用し、16進数に変換するために16のベース値を渡す:

x = strtol(num_char, NULL, 16); 
+0

リトルエンディアンは、右から左に配列を読み取る方法がありますか? – flavour404

0

あなたが投稿したコードとあなたの説明から、それはあなたがASCII文字の文字列を扱っているように見えるのではなく、しませんバイナリ番号をバッファリングするバッファ。生のバイナリ値を整数に変換するには、単に正しい値にキャストするだけです。正しいサイズの整数型にキャストするように注意する必要があることに注意してください。あなただけのリスト2つのあなたの例の数のバイトが、あなたがintまたはlongは4バイトの整数であるのVisual Studio 2008の場合は、4

読んでいる、あなたは、単にこれを行うことができます。

int x = *reinterpret_cast<int*>(num_char); 

注意をより移植性の高いものにするためには、4バイトであることが保証されるタイプを使用するべきです。 Visual C++では、DWORDを使用できます。推奨される解決方法は、stdint.hのint32_tを使用することですが、Visual Studio 2010以前のバージョンではVisual Studioでは使用できません。

また、タイプが符号付きか符号なしか、符号なしの型を使用します。

関連する問題