Comment lire little endian entiers à partir d'un fichier en C++?
Dire que j'ai un fichier binaire; il contient positive des nombres binaires, mais écrit dans little endian en tant que nombres entiers de 32 bits
Comment puis-je lire ce fichier? J'ai ce droit maintenant.
int main() {
FILE * fp;
char buffer[4];
int num = 0;
fp=fopen("file.txt","rb");
while ( fread(&buffer, 1, 4,fp) != 0) {
//I think buffer should be 32 bit integer I read,
//how can I let num equal to 32 bit little endian integer?
}
//Say I just want to get the sum of all these binary little endian integers,
//is there an another way to make read and get sum faster since it's all
//binary, shouldnt it be faster if i just add in binary? not sure..
return 0;
}
double possible de Byte swap lors de la copie
la question couvre la même classe de problème, mais est différent, je pense. Un débutant va trouver le lié de questions & réponses difficiles à suivre.
Si vous utilisez un 80x86 machine - tous d'entre eux utilise little-endian - vous n'aurez pas besoin de faire des ajustements pour les nombres.
Plusieurs réponses sont en supposant que le lecteur n'est PAS en little endian. L'OP n'a pas fait mention de cela; seulement que le écrivain utilisé LE format de sortie. Le code doit être portable pour faire face à un CHIER ou des lecteurs (dont certains sont, heureusement).
la question couvre la même classe de problème, mais est différent, je pense. Un débutant va trouver le lié de questions & réponses difficiles à suivre.
Si vous utilisez un 80x86 machine - tous d'entre eux utilise little-endian - vous n'aurez pas besoin de faire des ajustements pour les nombres.
Plusieurs réponses sont en supposant que le lecteur n'est PAS en little endian. L'OP n'a pas fait mention de cela; seulement que le écrivain utilisé LE format de sortie. Le code doit être portable pour faire face à un CHIER ou des lecteurs (dont certains sont, heureusement).
OriginalL'auteur user1713700 | 2012-10-21
Vous devez vous connecter pour publier un commentaire.
C'est une façon de faire qui fonctionne sur big-endian ou little-endian architectures:
(unsigned) bytes[3] << 24
.Bon point, mais l'OP dit que c'est positif.
+1: pour ne pas en supposant que le lecteur est ÊTRE (bien que je serais allé 4,1 sur le
fread()
)Bon point sur la taille et le comte arguments pour fread -- changé.
ai-je besoin 0xFF après octets[0]? comme (buffer[0] & 0xFF) | (tampon[1] & 0xFF) << 8.. juste curieux, ce octets[1], si j'ai un numéro 123456. thx!
OriginalL'auteur Vaughn Cato
Si vous utilisez linux, vous devez regarder ici 😉
Il est à propos de fonctions utiles telles que le le32toh
Pouvez-vous développer ce lien seule réponse? Ajouter un exemple de code par exemple.
OriginalL'auteur Kylo
De CodeGuru:
Ainsi, vous pouvez lire directement à
unsigned int
et puis il suffit d'appeler cette.OriginalL'auteur Reunanen