2016-11-02 9 views
0

Ich versuche, eine Zeichenfolge in einer Struktur struct in erster Feld speichert Anzahl der Zeichen, die in zweiten Feld zu konvertieren. Bitte lassen Sie mich wissen, was ich in diesem Programm vermisse. Ich bekomme falsch ausgegeben (einige große Ganzzahl)Puffer zu struct Umwandlung

update: Kann dieses Programm korrigiert werden, um 4 (nsize) zu drucken?

#include <iostream> 
using namespace std; 

struct SData 
{ 
    int nsize; 
    char* str; 
}; 

void main() 
{ 
    void* buffer = "4ABCD"; 

    SData *obj = reinterpret_cast< SData*>(buffer); 

    cout<<obj->nsize; 
} 
+0

Es sieht aus wie Sie versuchen, Implementieren Sie Ihre eigene String-Klasse. Sie können sich 'std :: string' ansehen und sehen, wie sie von einem Zeiger zu einer' string' gehen. – NathanOliver

+0

was erwartest du zu sehen? – spektr

+0

Das Zeichen '' '4'''' ist nicht dasselbe wie die Ganzzahl' '' 4'''. Nicht in Größe oder Darstellung. – mascoj

Antwort

1

In einem SData-Objekt belegt eine ganze Zahl vier Bytes. Ihr Puffer verwendet ein Byte. Des Weiteren ist ein Zeichen ‚4‘ unterscheidet sich von einer binären Form einer ganzen Zahl 4.

+0

Es ist dennoch richtig, und obwohl niemand erforderlich ist, ihre Stimme zu erklären, die Sie nicht, dass jemand einen Gefallen tun, indem Downvoting und Gehen Weg. –

3

Ihr Ansatz völlig falsch ist. Die erste binäre Darstellung der ganzen Zahl hängt von der Plattform ab, dh sizeof von int und endiannes der Hardware. Zweitens werden Sie nicht in der Lage sein, char Zeiger auf diese Weise zu füllen, so müssen Sie einige Rangier-Code erstellen, die Bytes nach Format liest, wandeln sie Speicher in int und dann zuweisen und den Rest dort zu kopieren. Ein einfacher Ansatz, bei dem Speicherbausteine ​​an die Struktur übergeben werden, funktioniert bei dieser Struktur nicht.

1

, wenn Sie eine ASCII-Darstellung eines Datenstück machen wollen, dann, ja, müssen Sie die Serialisierung tun. Dies ist nicht einfach eine Frage der Hoffnung, dass eine für Menschen lesbare Version dessen, was Sie als Inhalt einer Struktur betrachten, einfach in diese Daten umgewandelt werden kann. Sie müssen ein Serialisierungsformat wählen und entweder Code schreiben oder eine vorhandene Bibliothek verwenden.

Beliebte Auswahl:

  • xml
  • json
  • yaml

würde ich json verwenden - Google nach "C++ json Bibliothek"