2010-12-30 19 views
0

Ich habe eine Zeichenfolge zum Beispiel mit 1000 Ich muss es in einer Variablen namens X (für zB) so die ganze Sache zu speichern, dass ich eine Zeichenfolge als Hexadezimal speichern muss Basis integer so, dass, wenn ich hinzufügen 3 (zum Beispiel)Wie konvertiert man eine Zeichenfolge, die eine hexadezimale Ganzzahl enthält

1000+3=1003 
1003+3=1006 
1006+3=1009 
1009+3=100C 
100C+3=100F 
100F+3=1012 
+0

C++ mit Visual Basic –

+0

??? Verwenden Sie C++ für diese oder Visual Basic (und ist das VB6 oder VB.NET)? – Oded

+0

Entschuldigung mit visueller C++ 2008 Express Edition –

Antwort

0

Sie uns einfach ein regelmäßiges integer und wenn Sie es angezeigt werden müssen, konvertieren zu einem hexadezimal-Format.

+0

nein nein, die Zeichenfolge enthält zunächst eine Zahl 1000, diese Zahl ist bereits im Hexadezimalformat dargestellt, so dass, wenn ich es in einer Variablen speichern muss es im Hexadezimalformat nicht dezimal sein, was Sie sagen das ist schon in dezimal und ich muss es in hexadezimal konvertieren, nein, es ist bereits hexadezimal –

+0

@Shadi Al Mahallawy - Sie machen gerade das Leben schwierig für sich. Konvertieren Sie die Zeichenfolge in ein "int", um mit den Berechnungen zu beginnen. Ein _decimal_ ist ein _decimal_ es ist ein _value_ - Sie können es in welchem ​​Format auch immer später anzeigen. – Oded

+0

Ich denke nicht, dass du mich erwischst, oder ich bekomme nichts, die Zeichenfolge enthält 1000, es ist eine Zeichenfolge, sie muss in eine Ganzzahl konvertiert werden, also habe ich atoi() verwendet und sie in Variable x gespeichert, weiß x enthält 1000, als x ist eine dezimale Darstellung, wenn ich die folgenden Berechnungen führe 1000 + 3 = 1003 1003 + 3 = 1006 1006 + 3 = 1009 1009 + 3 = 1012 Was ich brauche, ist, dass die Zahl in Hexadezimalen und nicht Dezimal so dargestellt werden würde wenn ich diese Berechnungen mache 1000 + 3 = 1003 1003 + 3 = 1006 1006 + 3 = 1009 1009 + 3 = 100C –

1

Es klingt, als ob Sie eine hexadezimale Zeichenfolge erhalten und den numerischen Wert in einer Variablen speichern müssen. Dann müssen Sie irgendwann in der Zukunft von der Variablen zurück in eine Zeichenfolge konvertieren.

Sie müssen sich keine Gedanken über die interne Darstellung machen, die von grundlegenden numerischen Typen (int, long, float) verwendet wird. Während der Computer den Wert nativ in Binärdateien speichert, sind Programmiersprachen so konzipiert, dass diese Tatsache (etwas) vor Ihnen verborgen ist, so dass Sie sich nicht darum kümmern müssen.

Jetzt, wo wir die Sprache den internen Speicher als "eine Nummer" abstrahieren lassen, brauchen wir nur noch eine Möglichkeit, diese Nummer zu lesen und zu schreiben. Alle Sprachen haben Funktionen, mit denen Sie Daten in verschiedenen Formaten lesen/schreiben können, und Sie können immer Ihre eigenen rollen (obwohl das nicht empfohlen wird, wenn Sie gerade lernen), also verwende ich C.

C Angebote scanf() und printf() - es gibt noch andere Funktionen, die diese Aufgabe erfüllen, aber diese sind ein anständiges Beispiel für Dinge, die Sie verwenden können. Diese Funktionen sind sehr ähnlich, so ist es einfach, einen Code zu schreiben:

 
#include <errno.h> 

#define FORMAT "%X" 

// Converts string input into n integer 
// 
// args 
// str the string to convert 
// x pointer to location for return value 
// 
// returns 
// 0 on success 
// nonzero on failure 
int get_num_from_hex_string(char* str, int* x) 
{ 
    if(str == 0) return EINVAL; 
    // we assume MAX_LEN is defined, somewhere... 
    if(strlen(str) > MAX_LEN) return EINVAL; 

    int result = scanf(FORMAT, x); 
    // there's prolly a better error, but good enough for now 
    if(result != 1) return EIO; 

    return 0; 
} 

// Converts an integer into a hex string 
// 
// args 
// x - the integer to convert 
// str - the pre-allocated output buffer 
// len - amount of space left in str. Must be 
//   at least 12 bytes. 
// 
// returns 
// 0 on success 
// nonzero on failure 
int get_hex_string(int x, char*str, int len) 
{ 
    if(str == 0) return EINVAL; 
    if(len < 12) return EINVAL; 

    sprintf(str, FORMAT, x); 
} 


0

Angenommen, Sie speichern Ihre String in einer Variablen:

std::string mystring; 

Dann, um Berechnungen auf, es zu tun, können Sie eine Funktion, die Sie selbst definieren:

void AddSomeNumber(std::string& mystring, int n) 
{ 
    // Convert the string to integer 
    unsigned mynumber; 
    sscanf(mystring.c_str(), "%x", &mynumber); 

    // Add a number 
    mynumber += n; 

    // Convert the number to string 
    char temp[9]; // pardon my style :-) 
    sprintf(temp, "%x", mynumber); 
    mystring = temp; 
} 

int main() 
{ 
    std::string mystring("1009"); 
    AddSomeNumber(mystring, 3); 
    std::cout << mystring << '\n'; // will print 100c 
} 
0

Entschuldigung für Fehler im Voraus, habe ich es schnell, nicht sicher, dass dies die Lösung ist, ist es nur eine Idee

#include <iostream> 
#include <string> 

using namespace std; 

class hexa 
{ 
public: 
    hexa(const char* x); 
    hexa(int x=0); 

    hexa& operator+(int x); 
    operator int&(); 
    operator string() const; 
private: 
    int value_; 
    friend istream& operator >>(istream &is, hexa& x); 
    friend ostream& operator <<(ostream &os, const hexa& x); 
}; 


int main() 
{ 
    hexa x(0x1009); 
    cout << "x = " << x << endl; 

    hexa y("6"); 
    cout << "y = " << y << endl; 

    cout << "x + y = " << x+y << endl; 
    return 0; 
} 

hexa::hexa(const char* x) 
    : value_(stoi(string(x), 0, 16)) 
{} 

hexa::hexa(int x) 
    : value_(x) 
{} 

hexa& hexa::operator+(int x) 
{ 
    value_ += x; 
    return *this; 
} 

hexa::operator int&() 
{ 
    return value_; 
} 

hexa::operator string() const 
{ 
    return to_string(_Longlong(value_)); 
} 

istream& operator >>(istream& is, hexa& x) 
{ 
    is >> hex >> x.value_; 
    return is; 
} 
ostream& operator <<(ostream& os, const hexa& x) 
{ 
    os << hex << x.value_; 
    return os; 
} 
2

Von dem, was ich sagen konnte, haben Sie eine Zahl in hexadezimaler Darstellung in einer Zeichenfolge, und Sie möchten das in eine int setzen. Sie möchten dann zu dem int hinzufügen können und seinen neuen Wert erneut in einer hexadezimalen Darstellung ausgeben, um das Ergebnis zu überprüfen.

#include <sstream> 
#include <ios> 

int main() { 
    std::string input = "1000"; 

    // Read the input string into a stream (streams have format conversion functionality) 
    std::stringstream ss; 
    ss << std::hex << input; 

    // Read the numerical value back out into an int 
    int x = 0; 
    ss >> x; 

    // Add 3 and display result in hex 
    x += 3; 
    std::cout << std::showbase << std::hex << x; // will output: 0x1003 

    // Add another 10 and display result in hex 
    x += 10; 
    std::cout << std::showbase << std::hex << x; // will output: 0x100d 
} 

Hoffe das hilft.

Verwandte Themen