Byte versch. Datentypen in unsigned char kopieren
-
Hallo!
Ich habe eine Templateklasse C1, die einige Methoden anderer Klassen C2 nutzt und diese haben "unsigned char " Parameter. Die Typen von C1 sind ebenfalss Vectoren von "char" bis "unsigned __int64" also alle möglichen Typen.
Nun muss ich die Datentypen von C1 in einen unsigned char stopfen um sie als Parameter an C2 zu übergeben.Mit folgenden Templatefunktionen kopiere ich die Bytes des Typs von C1 in einen unsigned char * un zurück wobei ich natürlich auch direkt memcpy aufrufen könnte.
template<typename T> void cpytouchar(unsigned char *pDest, const T *pSrc, size_t bytelen) { memcpy(pDest, pSrc, bytelen); } template<typename T> void cpyfromuchar(T *pDest, const unsigned char *pSrc, size_t bytelen) { memcpy(pDest, pSrc, bytelen); }
In etwa so kopiere ich dann
// Typ T von C1 ist hier jetzt long T * pType; // pType ein Vector von 20 Longs unsigned char *p = new unsigned char[20 * sizeof(T)]; cpytouchar(p, pType, 20 * sizeof(T)); delete [] p;
Wie gesagt der Veranschaulichungscodeschnipsel ist lediglich "skizziert".
Meine Frage nun: Steht hier Datenverlust an bzw. werden hier ALLE Bits korrekt kopiert?Falls nicht, gibt es eine Möglichkeit gezielt alle Bits sicher "hin und "her" zu kopieren?
P.S.: unsigned char * hat hier eigentlich gar nichts mit C String oder ähnlichem zu tun und die Klasse C2 kann leider nicht als "generische Klasse" implementiert werden.
Gruß Ullrich
-
Kann mir dazu denn niemand etwas sagen?
-
ich hab mir mal ne klasse dafür geschrieben die so ziemlich genau so arbeitet
(also chars und memcpy)funktioniert einwandfrei!
wenn dich die klasse interessiert: http://www.binarystudios.de/forum/files/binarydata.rar
-
Ullrich schrieb:
Meine Frage nun: Steht hier Datenverlust an bzw. werden hier ALLE Bits korrekt kopiert?
Nein, es steht kein Datenverlust an bzw. ja, alle Bits werden korrekt kopiert.