"unsigned char *" in "char" bzw. "int" konvertieren
-
Hallo,
ich hab letztens ein paar Netzwerk Tests mit RakNet gemacht. Leider bin ich in C++ nicht so erfahren um all meine Fragen zu beantworten und deshalb hab ich diese Fehlermeldung bekommen: (error C2440: 'Initialisierung': 'unsigned char *' kann nicht in 'char' konvertiert werden).
Der Fehler kam auf als ich dies versuchte (char test = packet->data;).
Um mit den gesendeten werten besser umzugehen ist es gut wenn ich diese in char oder int Konvertieren könnte.Meine frage:
Wie kann ich jetzt "unsigned char *" in char bzw. int konvertieren?
-
Empfang das ganz in ein einen
std::stringstreamund dann kannst du da ganz einfach mittels des>> - Operatorsden gewünschten Datentypen extrahieren.
-
Würde es nicht einfach so gehen?
int i=0; unsigned char c='D'; i=c;Oder ist das auch falsch?
Lg Mentras
-
Mentras schrieb:
Würde es nicht einfach so gehen?
int i=0; unsigned char c='D'; i=c;Oder ist das auch falsch?
Lg Mentras
Nicht falsch, aber am Thema vorbei.
Zerod schrieb:
Um mit den gesendeten werten besser umzugehen ist es gut wenn ich diese in char oder int Konvertieren könnte.
Wie kann ich jetzt "unsigned char *" in char bzw. int konvertieren?
Hi,
unisgned char* ist ein Zeiger auf unisgned char :p und kann auf alle denkbaren Datenstrukturen der Größe 0 Byte bis x Bytes zeigen. In einen char passt immer nur 1 Byte, d.h. möchtest du die Werte zwischenspeichern, gehen dir ziemlich sicher Daten flöten.
Angenommen, dein packet->data Zeigt auf eine nullterminierte Zeichenkette - der bequemste Weg den String zu speichern, ist ein string Objekt zu erzeugen:string str((char*)pp->data); // Objekt erzeugen. cout << str; // in den Inhalt reingucken.Angenommen, dein packet->data Zeigt auf irgendwas nicht nullterminiertes, dann wird dein Programm mit obigem Beispiel wahrscheinlich abstürzen. Du bräuchtest fürs Kopieren weitere Infos über die Größe, und für die Anzeige über den Inhalt etc.
-
also der komplette code sieht so aus:
#include "RakNetworkFactory.h" #include "RakPeerInterface.h" #include "MessageIdentifiers.h" #include <stdio.h> #include <string.h> int main(){ RakPeerInterface *peer1=RakNetworkFactory::GetRakPeerInterface(); RakPeerInterface *peer2=RakNetworkFactory::GetRakPeerInterface(); SocketDescriptor s1(1234,0); SocketDescriptor s2(1235,0); peer1->Startup(3,0, &s1, 1); peer1->SetMaximumIncomingConnections(3); peer2->Startup(3,0, &s2, 1); peer2->Connect("127.0.0.1",1234,0,0,0); while (1) { Packet *packet = peer2->Receive(); if(packet){ if(packet->data[0]==ID_CONNECTION_REQUEST_ACCEPTED) { printf("Peer2: ID_CONNECTION_REQUST_ACCEPTED\n"); peer2->Send("45", 256, HIGH_PRIORITY, RELIABLE_ORDERED, 0, UNASSIGNED_SYSTEM_ADDRESS, true); } else if (packet->data[0]==ID_CONNECTION_ATTEMPT_FAILED) { printf("Peer2: ID_CONNECTION_ATTEMPT_FAILED\n"); } peer2->DeallocatePacket(packet); } packet = peer1->Receive(); if(packet){ if(packet->data[0]==ID_NEW_INCOMING_CONNECTION) { printf("Peer1: ID_NEW_INCOMING_CONNECTION\n"); } else if (packet->data[0]==ID_CONNECTION_ATTEMPT_FAILED) { printf("Peer1: ID_CONNECTION_ATTEMPT_FAILED\n"); } else{ printf("%s", packet->data); char testasd = packet->data; } } } return 1; }
-
Zerod schrieb:
also der komplette code sieht so aus:
Sieht gut aus, schön C/C++ heterogen

Und wo ist jetzt das Problem? Oder wolltest du uns nur deinen Code präsentieren?
-
ich wollte genau wissen wie ich jetzt (ohne Probleme) in meinem code einen "unsigned char *" in "char" bzw. "int" konvertieren kann.
-
Zerod schrieb:
ich wollte genau wissen wie ich jetzt (ohne Probleme) in meinem code einen "unsigned char *" in "char" bzw. "int" konvertieren kann.
Hast du meinen Beitrag nicht gelesen?
Was gibt dir die Zeile 52 aus ?
-
die packet data, das gesendete Paket, in meinem Fall unsigned char "45". Mehr weiss ich auch nicht.^^ wie gesagt "c++ noob"^^
-
In einen int umwandeln ist nicht ratsam, du weisst nicht wie viele Bytes da hinter stecken.
In einen char umwandeln geht ca. so:
char testasd = (char)(*packet->data);
Dabei wird aber nur das erste Zeichen, auf das packet->data zeigt, umgewandelt. Ich nehme aber an, du willst alle Zeichen zwischenspeichern: Im Falle eines Strings habe ich dir oben bereits ein Beispiel gezeigt.