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 Grunde 182 * sizeof(unsigned char) ist die gleiche wie 182.
  • 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 0
  • memcpy( lpBuffer, strRecvBuffer, 182 ) sollte den job tun. Es ist etwas anderes bist du nicht zu uns zu zeigen. Auch: warum tun Sie gewirkt void manchmal, und andere nicht? Warum weisen Sie NULL auf eine variable, die sofort gehen aus dem Rahmen, und warum willst du auf null prüfen, bevor delete[] (wobei ein null-Zeiger ist legal), und nicht früher? Für diese Angelegenheit, warum solltest du auf null prüfen, da new[] garantiert nie wieder einen null-Zeiger? Und vielleicht am wichtigsten: warum sind Sie mit new[] statt std::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 in memcopy und überprüfen Sie den Inhalt lpbuffer 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.

InformationsquelleAutor MRM | 2012-10-05
Schreibe einen Kommentar