c++ unsigned char Speicher kopieren
Ich übergeben zu müssen, ein unsigned char-array aus einer Methode zu einer anderen, und ich habe versucht mit diesem code:
{
unsigned char *lpBuffer = new unsigned char[182];
ReceiveSystemState(lpBuffer);
}
BOOL ReceiveSystemState(unsigned char *lpBuffer)
{
unsigned char strRecvBuffer[182] = { 0 };
//strRecvBuffer construction
memcpy(lpBuffer, strRecvBuffer, sizeof(strRecvBuffer));
return TRUE;
}
Keiner dieser 3 Methoden (verwendet in ReceiveSystemState
) gearbeitet, als ich erwartet hatte. Nach der Verwendung von jedem einzelnen von Ihnen allen, dass es kopiert wird, ist der erste char von strRecvBuffer
und nichts mehr. Die strRecvBuffer
leer chars von element zu element, aber ich brauche diese, wie Sie sind, denn string ist eine Nachricht, die von einem hardware-Gerät und die Nachricht wird anallysed über ein Protokoll. Was vermisse ich hier? Muss ich initialisieren lpBuffer
falsch?
EDIT: ich habe eine einfache memcpy
Methode, um den job zu erledigen. Immer noch das gleiche Ergebnis: alle, die es kopiert wird, ist der erste char von strRecvBuffer
.
EDIT2: Arbeiten code:
{
unsigned char *lpBuffer = new unsigned char[182];
ReceiveSystemState(lpBuffer);
for (int i = 0; i < 144; i++)
{
memcpy(&c_dateKG[i], lpBuffer + i * sizeof(unsigned char), sizeof(unsigned char) );
}
}
BOOL ReceiveSystemState(unsigned char *lpBuffer)
{
unsigned char strRecvBuffer[182] = { 0 };
//strRecvBuffer construction
memcpy(lpBuffer, strRecvBuffer, sizeof(strRecvBuffer));
return TRUE;
}
- glaube nicht, dass es einen Unterschied machen wird, da
unsigned char
hat 1 byte-Größe. also im Grunde182 * sizeof(unsigned char)
ist die gleiche wie182
. - Ich habe diese nicht erhalten. Wo kommen die Daten her? Sie definieren strRecvBuffer enthalten eine 0 und Müll danach. Andere als die, memcpy kopiert das array, wird Ihre Schleife.
= { 0 }
ist die syntax, um alle Elemente auf 0memcpy( lpBuffer, strRecvBuffer, 182 )
sollte den job tun. Es ist etwas anderes bist du nicht zu uns zu zeigen. Auch: warum tun Sie gewirktvoid
manchmal, und andere nicht? Warum weisen SieNULL
auf eine variable, die sofort gehen aus dem Rahmen, und warum willst du auf null prüfen, bevordelete[]
(wobei ein null-Zeiger ist legal), und nicht früher? Für diese Angelegenheit, warum solltest du auf null prüfen, danew[]
garantiert nie wieder einen null-Zeiger? Und vielleicht am wichtigsten: warum sind Sie mitnew[]
stattstd::vector< unsigned char >
?- die Daten stammen aus einem seriellen Anschluss, mit Hilfe einer anderen Methode, und die Erklärung ist für initializind alle Elemente mit
0
. - was ich nicht zeigen, Sie ist eine Methode, die liest die Daten von einem seriellen port und zurück
strRecvBuffer
. Das sollte nicht im Konflikt mit dem rest des Codes. - Vielleicht, aber es gibt keinen Grund, in den code, den Sie anzeigen für
memcpy
nicht zu funktionieren. Debug
legen Sie einen Haltepunkt inmemcopy
und überprüfen Sie den Inhaltlpbuffer
ersten.- Tat und den Vergleich von 2 arrays.
- in Bezug auf "eine Methode liest die Daten aus einer seriellen Schnittstelle und gibt strRecvBuffer." im obigen code strRecvBuffer ist eine lokale variable, deshalb können wir davon ausgehen, dass Sie auf der Durchreise sind es die unsichtbaren Methode? Der code oben ist nicht der code von der Quelle verursacht das Problem. Ich habe keine Zweifel, Sie haben ein Problem, aber in den Prozess der trimmen, was Sie als unwichtig-code vor dem posten hier, das Sie getrimmt das problem auch. Alle Zweifel, die ich schlage vor, Sie erstellen ein stand-alone-Datei mit nur den code oben zu laufen. sowohl das dyn-alloc " und "statisch" 182 bytes. funktioniert.
- diese Methode war nicht das problem in der Tat. Ich habe bearbeitet Sie meine Frage mit den funktionierenden code.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihren code absolut Müll. Einige Hinweise:
Verwenden, sizeof
Verwenden, sizeof(static_massive_name); oder count_of_arr_elements * sizeof(arr_type); Beispiel:
UPDATE:
Vollständige source-code zum testen:
Ergebnis
BOOL ReceiveSystemState(unsigned char *lpBuffer)
,lpBuffer
übergeben Sie einen Zeiger auf ein array von chars, also das, was der debugger zeigte meiner als "nur der erste char" war tatsächlich der erste char von dem ganzen memory zonelpBuffer
hinwies. (meine Erklärung ist vielleicht nicht allzu genau). So gab es keine andere problem als ... nun, mir! Ich brauchte nur zu verwendenmemcpy(&c_dateKG[i], lpBuffer + i * sizeof(unsigned char), sizeof(unsigned char) );
kopieren Sie die Werte aus dem array wieder aus dem Speicher. Ich habe meinen Beitrag aktualisiert mit den korrekte Verwendung von code. Danke!