2010-06-30 7 views
1

Comment convertir un tableau long non signé en octet en C++? Je développe en utilisant VS2008 C++.Comment convertir un tableau long non signé en octet en C++?

Edit:

Je dois évaluer la taille de ce nombre converti, je veux diviser ce long tableau à un tableau de 29byte.
par exemple nous avons un tableau long = 12345;
il devrait convertir en octet et puis j'ai besoin de sa longueur pour diviser à 29 et voir combien de paquets il est. La perte de données est importante mais pour le moment, je veux juste obtenir des résultats.

+1

S'il vous plaît expliquer plus loin. Avez-vous besoin de le copier, ou est-ce suffisant pour accéder au tableau original en utilisant un 'char *'? Avez-vous besoin de changer l'endianness? –

+0

Sûrement il y a une raison pour laquelle c'est long? Vous risquez de perdre des données. Pouvez-vous expliquer plus sur ce que vous essayez d'atteindre? – Mawg

+0

Comme Matthew a dit: Que faisons-nous ici? A nous faisons-nous une sorte de down-sampling? Sommes-nous en série à un flux d'octets pour la sortie sur un réseau/fichier/etc.? – Thanatos

Répondre

2
long array[SOME_SIZE]; 
char* ptr = reinterpret_cast<char*>(array); // or just (char*)array; in C 

// PC is little-endian platform 
for (size_t i = 0; i < SOME_SIZE*sizeof(long); i++) 
{ 
    printf("%x", ptr[i]); 
} 

est ici solution plus robuste pour vous, pas boutisme (cela ne couvre pas les étranges appareils DSP où char peut être entité 32 bits, ce sont spéciaux):

long array[SOME_SIZE]; 

for (size_t i = 0; i < SOME_SIZE; i++) 
{ 
    for (size_t j = 0; j < sizeof(long); j++) 
    { 
     // my characters are 8 bit 
     printf("%x", ((array[i] >> (j << 3)) & 0xff)); 
    } 
} 
+0

Notez que les données dans ptr ne seront que little-endian sur les machines little-endian: cette solution produira une sortie big-endian sur les machines big-endian, et une sortie little-endian sur les petites machines endian. Comprenez ce que signifie l'endianité, et si l'importance de l'endianisme est importante, cherchez une solution plus robuste. – Thanatos

+0

Merci pour votre solution, j'espère que cela fonctionne, mais pourriez-vous m'aider, comment je peux compter combien d'octets est-il? d'autre part par exemple 10 égal 1001 donc c'est 4 octets – Amir

+0

Vous pouvez traiter les tailles bizarres de 'char' en remplaçant' j << 3' par 'j * CHAR_BIT', et' 0xff' par '((1 << CHAR_BIT) - 1) '. Vous devrez inclure '' pour cela. –

Questions connexes