Typenwandlung String in unsigned char



  • hallo,
    ich bräuchte den code, wie ich einen string in einen unsigned char wandle.
    ich brauche das da ich einen Binären wert in die Registry schreiben will und der wert liegt als string vor und der Byte wert des registryschlüßels verlangt nach einem unsigned char.

    CString ValueWert = "21 43 4C 52 10 00 00 00" (natürlich ohne leerstellen)
    
    //Einen Handle auf die Registry Classe holen				
    CCtrlRegistry* CtrlReg = (CCtrlRegistry*)AfxGetInstanceHandle();			
    CtrlReg->RegKeySetValueBinary(hMasterKey, SubKey, ValueName, GetStringInByte(ValueWert));
    
    BYTE CSetRegistryKeyApp::GetStringInByte(CString ValueWert)
    {
    	unsigned char Byte =  sizeof(ValueWert);
    
    	for(int nloop = 0;nloop<=ValueWert.GetLength();nloop++)
    	{
    	//Byte+=ValueWert.GetAt(nloop);
    	}
    	return Byte;
    }
    
    BOOL CCtrlRegistry::RegKeySetValueBinary(HKEY hMasterKey, CString SubKey, CString ValueName, BYTE ValueWert)
    {
    	HKEY hKey;
    	RegOpenKey(hMasterKey, SubKey, &hKey);
    
    	LONG Result = RegSetValueEx(hKey, ValueName, 0, REG_BINARY, &ValueWert, 0);
    
    	if(Result != ERROR_SUCCESS)
    	{return FALSE;}
    
    RegCloseKey(hKey);
    return TRUE;
    }
    

    die ausgeschloßene zeile in GetStringInByte (//Byte+=ValueWert.GetAt(nloop);) veruhrsacht eine unbehandelte ausnahme und läst mein prog abstürzen. Lass ich mein prog so laufen setzt es mir die binären schlüßel in der registry aber ohne wert. ich suche nun schon seit tagen verzweifelt nach der möglichkeit einen string in ein unsigned char zu bekommen.



  • LowFly schrieb:

    die ausgeschloßene zeile in GetStringInByte (//Byte+=ValueWert.GetAt(nloop);) veruhrsacht eine unbehandelte ausnahme und läst mein prog abstürzen

    Was hast du denn erwartet, wenn du auf ValueWert.GetAt(ValueWert.GetLength()) zugreifst?

    MSDN schrieb:

    nIndex

    Zero-based index of the character in the CString object. The nIndex parameter must be greater than or equal to 0 and less than the value returned by GetLength.

    LowFly schrieb:

    ich bräuchte den code, wie ich einen string in einen unsigned char wandle.

    Bist du dir wirklich sicher, dass du das machen willst? Ein String besteht aus n Zeichen, ein single-byte String demnach aus n Bytes. unsigned char ist aber lediglich ein Byte. Wie willst du also die ganzen Zeichen aus dem String in ein einzelnes Byte bekommen? Darüber solltest du nochmal nachdenkne, dann wirst du auch erkennen, dass RegSetValueEx einen Byte Buffer verlangt.
    Umwandeln brauchst du dann gar nichts, da dein CString sozusagen schon als Byte Buffer vorliegt. Du solltest nur auf ANSI/Unicode Character Set und die Spezifikationen der RegSetValueEx Parameter achten.



  • lowfly schrieb:

    groovemaster schrieb:

    Was hast du denn erwartet...

    eine quallifiziertere antwort als du sie mir gegeben hast.

    zb:

    CString der_wert = "AFB0983256E4";

    RegSetValueEx(hKey, ValueName, 0, REG_BINARY,reinterpret_cast<unsigned char*>(der_wert.GetBuffer(sizeof(der_wert))), der_wert.GetLength());

    stammt von jemanden der quallifiziertere antworten gibt als du.

    und nun halt dich bitte geschloßen und gib mir ja nie wieder irgend eine Antwort wenn ich hilfe brauch.

    schönen tach auch

    lowfly

    Wieso bist du kein Mann und postest deinen Spam nicht ins Forum? 😉
    Wenn du keine Kritik vertragen kannst und deine Fehler nicht siehst, dann ist das nicht mein Problem, oder?
    Und

    RegSetValueEx(hKey, ValueName, 0, REG_BINARY,reinterpret_cast<unsigned char*>(der_wert.GetBuffer(sizeof(der_wert))), der_wert.GetLength());
    

    ist für dich eine qualifizierte Antwort? Na dann gute Nacht!
    Dir ist schon klar, was der Unterschied zwischen sizeof(CStringInstance) und CStringInstance.GetLength() ist und welchen Parameter GetBuffer erwartet?
    Zudem fällt mir noch auf, dass du eine lexikalische Umwandlung vornehmen musst, wenn du zB "AFB0983256E4" nicht als String, sondern eben die entsprechenden 6 Byte Werte (0xAF 0xB0 0x98 0x32 0x56 0xE4) in der Registry speichern willst. Ein reinterpret_cast hilft dir da auch nicht weiter.
    Aber keine Sorge, da du ja so ein helles Köpfchen bist und keine Hilfe brauchst, werde ich auch nichts weiter sagen. 😉


Anmelden zum Antworten