Variable verwenden anstatt Pointer auf einen String

ArmerStudent

Grünschnabel
Hallo zusammen!

Folgende Funktion liefert den Dezimalwert der Zeichenfolge "FF", also 255.

//--------------------------------------------------------------------------------

char * hexstring = "FF";
char * p;
int number = strtol(hexstring, &p,16);

bool HexToDecimal (char* HexNumber, int& Number)
{
char* pStopString;
Number = strtol (HexNumber, &pStopString, 16);
return (bool)(Number != LONG_MAX);
}

//---------------------------------------------------------------------------------

Nun möchte anstatt eines festen Wertes ("FF") einen variablen Wert in eine Editbox eingeben (0 bis FF) und den umwandeln. Hat jemand eine Idee, wie man anstatt eines Pointers auf einen String, eine Variable vom Typ Char verwenden kann?
Für jede Hilfe bin ich dankbar.

Gruß ArmerStudent
 
Oh gott ^___^ das ist C urgestein - mal sehen ob ich das noch weis ^:^

Also erstma ist das total komisch was du machst und ich bin überascht, das das klappt - denn anstelle von : "char *hextring = "FF"; "
sollte eigentlich sowas dastehen : "char hexstring = "FF"; "
Du hast da nirgends speicher reserviert oder so - das dürfte eigentlich gar nicht gehen. (?)

Der Funktion kannst du das dann per : "strtol(&hexstring, &p,16);"
Den inhalt der Variable kannst du dann zu laufzeit so ändern: "strcpy(&ziel, &quelle);" oder so.

M.f.G. Erik
 
In dem Fall geht das und ist auch so beabsichtigt:

char* zeigt auf einen konstanten(!) String, den der Compiler automatisch alloziiert. Allerdings darf in so eine String-Konstante nie reingeschrieben werden.

Wenn du deinen String aus der Edit holst, müsste das ja so aussehen:

char szTemp[200];

GetWindowText( hwndEdit, szTemp, 200 );

Damit solltest du die Funktion auch direkt aufrufen können:

int iHex = 0;

HexToDecimal( szTemp, iHex );

Falls der Compiler das nicht direkt frisst, müsste

HexToDecimal( &szTemp[0], iHex )

funktionieren.

Allerdings verwendest du ja offensichtlich sowieso C++ (Referenzen!), da müsste ersteres klappen. Mal abgesehen davon, dass ich dann soweit nur irgend möglich auf std::string ausweichen würde.
 
Vielen Dank für alle Beiträge!

Gelöst habe ich mein Problem am Ende so:

UpdateData(TRUE);
CString strHex = m_char; //m_char = Variable aus Editbox
int HexLen = strHex.GetLength();
LPTSTR lpszHex = strHex.GetBuffer(HexLen);//Umwandeln des CString in ein LPTSTR

char *p;

int iHex = strtol(lpszHex,&p,16);

UpdateData(TRUE);
m_hex = iHex; //m_hex = Ausgabe des Hex-Wertes
UpdateData(FALSE);
}
 
Nicht vergessen, wenn du bei einem CString GetBuffer aufrufst, musst du auch ReleaseBuffer aufrufen!
 

Neue Beiträge

Zurück