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 ...! P>
Chaque aide pour effacer mon malentendu sera apprécié !!! p>
3 Réponses :
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). P>
C ++ permet à un Donc, pour connaître le nombre de bits en 32 octets, vous utiliseriez la formule C ++ 17 a introduit le nouveau type Afin de trouver le nombre d'octets nécessaires pour contenir 256 bits, vous avez un problème, car char code> pour être n'importe quelle taille une plate-forme requise. Cependant, le macro
char_bit code> a toujours le nombre de bits dans un
char code>. P>
32 * char_bit code>. p>
std :: octet code> qui n'est pas un type de caractère et est toujours
char_bit code> 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 p>
char_bit code> 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 code> vous donnera le nombre d'octets nécessaires pour contenir 256 bits contigus. P>
@Lebeau c'est plus compliqué que ça; Voir mon édition.
J'utiliserais (256+ (char_bit-1)) / char_bit code> à la place. Mais point pris.
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 Le nombre de bits dans un octet est défini par la mise en œuvre C. Il est rapporté dans 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 EM>, 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 em>. P> scanf code>, 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.) P>
char_bit code>, défini dans
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 code> 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 CODE> MACRO IN CODE> Pour le nombre réel de bits par octet. Ou utilisez un type de données garanti pour être 8 bits, comme
uint8_t code>
@Kevin c'est des données binaires réelles d'un fichier