-2
votes

Puis-je être sûr que 32 octets de données binaires lues à partir d'un fichier sont égaux à 256 bits?

Je veux lire un fichier 32 octets à la fois en utilisant un programme C / C ++, mais je veux être sûr que les données seront de 256 bits. En substance, je suis inquiet pour les principaux bits dans les "octets" que je lisai du dossier étant éteint? Est-ce même une question de préoccupation? Exemple: si j'ai un numéro dit 2 représentées en binaire comme 10. Ce serait suffisant pour moi en tant qu'être humain. Comment est-ce différent aussi loin qu'un ordinateur est inquiet s'il est écrit comme: 00000010 pour représenter une valeur de caractère de 1 octet ??? Les plus grands zéros affecteraient-ils le nombre de bits? Est-ce que cela affecte à son tour des opérations comme XOR? J'ai du mal à comprendre ses effets! Est-ce que cela implique une perte de données? Je ne sais vraiment pas ...!

Chaque aide pour effacer mon malentendu sera apprécié !!!


4 commentaires

Quel est le contenu du fichier? Est-ce en fait 32 octets que vous lisez? Ou s'agit-il de caractères '0' ou de '1' (éventuellement 256 d'entre eux, éventuellement pas) que vous lisez et que vous convertissez en chiffres?


Je vous suggérerais d'ignorer cela pour le moment. Écrivez un code simple pour lire et écrire des données dans un fichier et voir si vous rencontrez des ennuis. Si oui, demandez une aide plus spécifique.


1 octet est le plus petit type de données adressable en C / C ++. Char est de 1 octet en taille. Mais 1 octet n'est pas nécessairement 8 bits, ce qui est la taille la plus courante utilisée dans la plupart des plates-formes modernes. Vérifiez votre Char_bit MACRO IN Pour le nombre réel de bits par octet. Ou utilisez un type de données garanti pour être 8 bits, comme uint8_t


@Kevin c'est des données binaires réelles d'un fichier


3 Réponses :


0
votes

La macro Char_bit (définie dans les climatiques) vous indiquera combien de bits constituent un octet dans l'environnement d'exécution. Cependant, je ne suis pas au courant d'aucun matériel général à usage général qui utilise des octets de 8 bits autres. Certains processeurs spécialisés (tels que pour le traitement du signal numérique) peuvent utiliser d'autres tailles. Également complètement obsolète d'équipement utilisé une grande variété de tailles (l'alternative typique à 8 bits étant 9).


0 commentaires

0
votes

NO

C ++ permet à un char pour être n'importe quelle taille une plate-forme requise. Cependant, le macro char_bit a toujours le nombre de bits dans un char .

Donc, pour connaître le nombre de bits en 32 octets, vous utiliseriez la formule 32 * char_bit .

C ++ 17 a introduit le nouveau type std :: octet qui n'est pas un type de caractère et est toujours char_bit bits, comme expliqué dans la question de la question " href = "https://stackoverflow.com/questions/43143318/stdbyte-on-odd-platforms"> std :: octet sur des plates-formes impaires

Afin de trouver le nombre d'octets nécessaires pour contenir 256 bits, vous avez un problème, car char_bit n'est pas toujours un diviseur de 256. Donc, vous devez donc décider de ce que vous voulez et Utilisez une formule plus compliquée. Par exemple, 1+ (255 + char_bit) / char_bit vous donnera le nombre d'octets nécessaires pour contenir 256 bits contigus.


2 commentaires

@Lebeau c'est plus compliqué que ça; Voir mon édition.


J'utiliserais (256+ (char_bit-1)) / char_bit à la place. Mais point pris.



2
votes

Chaque routine de la bibliothèque standard C qui se lit à partir d'un fichier ou d'un flux lit en unités d'octets. Chaque octet Lire est un nombre fixe de bits; Ce qui est lu à partir d'un fichier ne varie pas en raison de la principale mesure des zéros ou de son absence dans un octet. Certaines routines renvoient un seul caractère (qui est un octet). Certaines routines mettent des données lues dans un tampon et renvoient un nombre d'octets lus. Certaines routines, telles que scanf , renvoient un nombre de numéros convertis avec succès. (Vous n'utiliserez généralement pas ces routines pour lire un nombre fixe d'octets.)

Le nombre de bits dans un octet est défini par la mise en œuvre C. Il est rapporté dans char_bit , défini dans . Il en est huit dans toutes les implémentations de Conique.

Bien que le nombre de bits par octet ne varie pas, le nombre d'octets lus à partir d'un flux peut varier. Si un flux est ouvert sous la forme d'un flux de texte , les caractères peuvent être "ajoutés, modifiés ou supprimés lors de l'entrée et de la sortie pour se conformer à des conventions différentes pour représenter le texte dans l'environnement hôte" (C 2018 7.21.2 2). Pour éviter cela, vous devez ouvrir un flux en tant que diffusion binaire .


0 commentaires