Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

15.10.2008, 19:31

[gelöst] unsigned char in string umwandeln

Hi Leute, möchte gern aus der Registry ein Pfad auslesen. Das Pfad auslesen hat auch soweit geklappt, hab aber Probleme das ganze in nem strin für die spätere Verwendung zu speichern:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <string>

int main(int argc, char **argv)
{
    unsigned char temp[99] = "";    
    char save[] = "";
    char var[99];
    unsigned long size = sizeof(temp);
    std::string str;

    HKEY hKey;
    
    RegOpenKey(HKEY_LOCAL_MACHINE, L"Software\\Blizzard Entertainment\\World of Warcraft", &hKey);
    RegQueryValueEx(hKey, L"InstallPath", NULL, NULL, temp, &size);
    RegCloseKey(hKey);
    
    std::cout << "Value: ";

    for (int i=-1; i<99; i++)
    {   
        i++;
        std::cout << temp[i];
        save[i] = temp[i];
    }

    strcpy(var, save);

    str = var;

    std::cout << str << std::endl;
    
    system("pause");
    return 0;
}


Sobald ich das Programm starte, zeigt mir mein sting "str" irgendwelche Hyroglyphen. Hab schon in der msdn etc. nach der Syntax von strcpy(); nachgeschaut aber nix helfendes gefunden.

Wäre dankbar über Hilfe ;)

BlackSnake

Community-Fossil

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

2

15.10.2008, 19:45

mit nem stream kannste das evtl lösen

C-/C++-Quelltext

1
2
3
4
#include <sstream>
std::stringstream a;
a << value;
a.str();

3

15.10.2008, 20:19

Kannst ja mal folgendes ausprobieren:

C-/C++-Quelltext

1
2
3
4
5
6
7
// Direkt in str ablegen

RegQueryValueEx(hKey, L"InstallPath", NULL, NULL, str.c_str(), &size);

// Oder erst in temp ablegen, dann str zuweisen

RegQueryValueEx(hKey, L"InstallPath", NULL, NULL, temp, &size);
str += temp;
 

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

4

15.10.2008, 20:33

Zitat von »"TrikkieMikkie"«

Kannst ja mal folgendes ausprobieren:

C-/C++-Quelltext

1
2
3
4
5
6
7
// Direkt in str ablegen

RegQueryValueEx(hKey, L"InstallPath", NULL, NULL, str.c_str(), &size);

// Oder erst in temp ablegen, dann str zuweisen

RegQueryValueEx(hKey, L"InstallPath", NULL, NULL, temp, &size);
str += temp;
 


ersteres geht nicht, da die fkt. c_str() const ist. zweiteres wäre der weg den ich auch gehen würde.

5

15.10.2008, 20:36

Zitat von »"TrommlBomml"«

ersteres geht nicht, da die fkt. c_str() const ist. zweiteres wäre der weg den ich auch gehen würde.

ersteres: War ein Schuss aus der Hüfte. :)

zweiteres: schön! ;)

6

15.10.2008, 20:39

Zitat

Sobald ich das Programm starte, zeigt mir mein sting "str" irgendwelche Hyroglyphen.

Nur der "str", oder auch das, was bei der for-Schleife ausgegeben wird?

7

16.10.2008, 13:22

Quellcode

1
2
3
4
5
for( int i=-1 ... 99; i++ )
i++;
temp[i];
char save[] = "";
save[i] = temp[i];

Erklaere mit doch mal die Zeilen. Erklaere mir auch mal, warum du C-API und C++ mischt. Erklaere mir doch mal, warum du versuchst, alles 3 mal hin- und herzukopieren. Die paar Deilen sind sowas von Muell (und es liegt in erster Linie nicht an strcpy)! Du kannst kein strcpy mit einem Objekt der Klasse String benutzen. Nullterminierte Zeichenketten a la char* tmp kannst du aber mit std::string str(tmp) in Stringobjekte verwandeln.

8

16.10.2008, 20:37

Zitat von »"knivil"«

Quellcode

1
2
3
4
5
for( int i=-1 ... 99; i++ )
i++;
temp[i];
char save[] = "";
save[i] = temp[i];

Erklaere mit doch mal die Zeilen. Erklaere mir auch mal, warum du C-API und C++ mischt. Erklaere mir doch mal, warum du versuchst, alles 3 mal hin- und herzukopieren. Die paar Deilen sind sowas von Muell (und es liegt in erster Linie nicht an strcpy)! Du kannst kein strcpy mit einem Objekt der Klasse String benutzen. Nullterminierte Zeichenketten a la char* tmp kannst du aber mit std::string str(tmp) in Stringobjekte verwandeln.


Naja, das war mehr ein verzweifelter Versuch, als was Sinnvolles. Ich wollt so versuchen unsigned char in signed char umzuwandeln...

Zitat

// Oder erst in temp ablegen, dann str zuweisen
RegQueryValueEx(hKey, L"InstallPath", NULL, NULL, temp, &size);
str += temp;


Quellcode

1
error C2679: Binärer Operator '+=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'unsigned char [99]' akzeptiert (oder keine geeignete Konvertierung möglich)


?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

9

16.10.2008, 21:08

C-/C++-Quelltext

1
#include <string>


So langsam sollts mal angekommen sein... :roll:
@D13_Dreinig

10

16.10.2008, 21:26

naja, nich wirklich, deshalb hab ich mich nochmal drangesetzt und was anderes versucht, funktioniert, bis auf das "Leerzeichen" zwischen den Zeichen sind und als komische Ascii zeichen ausgegeben werden, aber die Werte dazwischen passen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <string>

int main(int argc, char **argv)
{
    // Vars deklarieren

    unsigned char temp[99] = {" "}; 
    unsigned long size = sizeof(temp);
    std::string str;

    HKEY hKey;
    
    // Pfad aus registry lesen

    RegOpenKey(HKEY_LOCAL_MACHINE, L"Software\\Blizzard Entertainment\\World of Warcraft", &hKey);
    RegQueryValueEx(hKey, L"InstallPath", NULL, NULL, temp, &size);
    RegCloseKey(hKey);
    
    // var und save je nach größe von temp paramterieren

    char save[sizeof(temp)+1];
    char var[sizeof(temp)+1];

    // Pfad ausgeben, mittels for Schleife

    std::cout << "value: ";

    for (int i=-1; i<99; i++)
    {   
        i++;
        std::cout << temp[i];
        save[i] = temp[i];
    }
    
    // Versuchen ein gespeichertes char array zu speichern was nicht klappt, sondern zwar alles ausgibt, 

    // aber mit Hyroglyphen dazwischen

    std::cout << save << std::endl;


    system("pause");
    return 0;
}

Werbeanzeige