Konvertieren von char* , uint8_t
Übertrage ich Nachricht über ein CAN-Protokoll.
Zu tun, die CAN-Nachricht benötigt Daten Typ uint8_t. Also muss ich konvertieren, meine char* , uint8_t. Meine Forschung auf dieser Website, ich erstelle code :
char* bufferSlidePressure = ui->canDataModifiableTableWidget->item(6,3)->text().toUtf8().data();//My char*
/* Conversion */
uint8_t slidePressure [8];
sscanf(bufferSlidePressure,"%c",
&slidePressure[0]);
Wie Sie sehen können, meine char*
müssen fit in sliderPressure[0]
.
Mein problem ist, dass selbst, wenn ich keine Fehler während der Kompilierung, die Daten in slidePressure sind völlig falsch,. In der Tat, ich test es mit einem char* = 0
and I 've got unknow Zeichen ... Also ich denke, das problem muss von Bekehrung.
Meine Daten können Bool, Uchar, Ushort and float
.
Vielen Dank für Ihre Hilfe.
"char* = 0" bedeutet "bufferSlidePressure == 0"? Wenn dem so ist, werden keine Daten umgewandelt werden.
Es bedeutet bufferSlidePressure = '0'
bitte zeigen Sie den spezifischen input& output-Wert. Der folgende code zeigt den richtigen Wert:
Es bedeutet bufferSlidePressure = '0'
bitte zeigen Sie den spezifischen input& output-Wert. Der folgende code zeigt den richtigen Wert:
char* buf = "0"; uint8_t slide[8]; sscanf(buf, "%c", &slide[0]); printf("%d", slide[0]);
InformationsquelleAutor Evans Belloeil | 2014-08-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist dein string eine Zahl? E. g.
char* bufferSlidePressure = "123";
?Wenn ja, würde ich einfach tun:
Oder, wenn Sie brauchen, um es in ein array:
Edit: nach deinem Kommentar, wenn Ihr Daten könnte alles sein, ich vermute, Sie haben, um es zu kopieren in den Puffer der die neuen Daten geben. E. g. so etwas wie:
Wenn ich das richtig verstehe, würde ich wahrscheinlich etwas tun, mit
memcpy()
(siehe mein edit).Es scheint, okay, aber ich brauche auch char hab *: (
Keine Konvertierung notwendig dann 🙂 Siehe Bearbeiten.
Dann ändern
char
zuuint8_t
in meinem letzten Beispiel und das sollte funktionieren. Wenn Sie kopieren möchten, um eineuint8_t
, dannsize=1
. Andernfalls kopieren Sie eine Reihe vonuint8_t
. Siehe auch memcpy - Dokumentation.InformationsquelleAutor carmellose
uint8_t ist 8 bit-Speicher, und speichern kann Werte von 0 bis 255
char ist wohl 8 bits des Speichers
char * ist wahrscheinlich 32 oder 64 bits des Speichers, der die Adresse einer anderen Stelle im Speicher, in denen es einen char
Erstens, stellen Sie sicher, dass Sie nicht versuchen, die Speicher-Adresse (char *) ins uint8 - setzen, was es Punkte, in:
Dann arbeiten Sie heraus, was Sie wirklich versuchen zu tun ... denn das ist nicht ganz Sinn macht. Zum Beispiel, ein Schwimmer ist wohl 32 oder 64 bits des Speichers. Wenn Sie denken, es ist ein float, die irgendwo in Ihrem char * data, Sie haben eine Menge zu erklären zu tun, bevor wir Ihnen helfen können :/
InformationsquelleAutor Andy Newman
Mehr sicher Beispiel in C++ Weg
Auch, wenn boost ist erhältlich
InformationsquelleAutor Yuri S. Cherkasov
char *
ist ein Zeiger, der nicht ein einziges Zeichen. Es ist möglich, dass Sie auf das Zeichen, das Sie wollen.uint8_t
ist unsigniert, aber auf den meisten Systemen wird die gleiche Größe wie einchar
und Sie können einfach werfen die Wert.Möglicherweise müssen Sie zum verwalten des Arbeitsspeichers und Leben von dem, was deine Funktion zurückgibt. Dies könnte getan werden, mit
vector< unsigned char>
als der Rückgabetyp der Funktion eher alschar *
, vor allem, wenn toUtf8() erstellen muss, der Speicher für die Daten.Deine Frage ist völlig unklar.
Das ist eine Menge von cascading nennt. Wir haben keine Ahnung, was Sie tun und ob Sie verkaufen oder nicht. Es sieht gefährlich aus.
Nein, Sie warf die Daten drin, aber es ist vollkommen unmöglich, herauszufinden, was Sie versuchen zu tun
InformationsquelleAutor CashCow