2017-02-06 6 views
-1

Von der Konsole aus frage ich nach einer hexadezimalen Zeichenfolge, die in einen Zeiger konvertiert werden soll, um auf ein Element im Speicher zu verweisen.string hex to pointer get value

#include <iostream> 
#include <sstream> 
#include <Windows.h> 

int char_to_pointer(std::string input); 

int main() { 
    int sample = 100; // lets say this address is 0xc1f1 
    std::string input_; 
    std::cout << "addr:" << &sample << std::endl; 
    std::cout << "what is the memory address?:" << std::endl; 
    std::cin >> input_; 

    unsigned int inp = char_to_pointer(input_); 
    std::cout << "imp: " << inp << std::endl; 

    Sleep(10000); 

    return 0; 
} 

int char_to_pointer(std::string input) { 
    return std::stoul(input, nullptr, 16); 
} 

Mein Problem ist, dass char_to_pointer nur den Hex-String in eine Dezimalzahl umwandelt.

das ist, was ich will:

input: "0xc1f1" 
output: 100 
+0

Sie wissen, dass ein Hex-Wert ist einfach eine Möglichkeit für Menschen Zahlen zu lesen, und dass 0xC1F1 hex und 49649 dezimal sind ** genau der gleiche Wert **, oder? Und dass Ihr 'char_to_pointer' absolut nichts tut, um ** die Adresse bei' 0xC1F1' zu lesen, um zu sehen, was es enthält? –

+0

Ja, das ist für eine Debug-Anwendung Ich schreibe, um disassemblierten Code zu testen. @KenWhite Ja, und das ist mein Problem. –

+0

Diese Frage zeigt ein grundlegendes Missverständnis der Natur der Zahlen. Zahlen sind keine Folgen von dezimalen oder hexadezimalen oder oktalen oder symmetrischen ternären Ziffern. Die Ziffernfolgen sind eine Möglichkeit, Zahlen dem Menschen zu zeigen. – AlexP

Antwort

0

fand ich die Lösung:

#include <iostream> 
#include <sstream> 
#include <Windows.h> 
#include <string> 

int *char_to_pointer(std::string input); 

int main() { 
    int sample = 100; // lets say this address is 0xc1f1 
    std::string input_; 
    std::cout << "addr:" << &sample << std::endl; 
    std::cout << "what is the memory address?:" << std::endl; 
    std::cin >> input_; 

    int *inp = char_to_pointer(input_); 
    std::cout << "imp: " << inp << std::endl; 
    std::cout << "imp*: " << *inp << std::endl;//This was my solution 
    std::cout << "imp&: " << &inp << std::endl; 

    Sleep(10000); 

    return 0; 
} 

int *char_to_pointer(std::string input) { 
    return (int *)std::stoul(input, nullptr, 16); 
}