2017-05-15 2 views
0

Je souhaite enregistrer certaines informations dans un fichier texte (format .txt). Pour réduire la taille du fichier, j'utilise chaque bit d'un nombre binaire de 16 bits pour représenter certaines informations. Par exemple, pour un nombre binaire de 16 bits 0000 0001 1000 1111, chaque bit a sa signification spécifique. Étant donné que tout caractère ASCII est égal à 8 bits nombre binaire, donc je veux convertir mon numéro 16 bits à deux caractères et enregistrez-le:Est-il possible de convertir un nombre binaire 16 bits en deux caractères et l'enregistrer dans un fichier texte?

uint16_t a; 
a = 13 << 10 | 1 << 3 | 2;// a is a 16bit binary number 
char b, c; 
b = (char)(a>>8); 
c = (char)a;// convert a to two characters 

Alors je sauverai b et c dans un fichier texte. Quand je lis le fichier texte plus tard, je vais convertir ces deux caractères en nombre binaire de 16 bits et obtenir les informations. Le problème est que je sais que certains caractères ASCII ne sont pas imprimables, alors je me demande s'il y a un problème? Toute réponse sera très appréciée!

+0

Les caractères non imprimables ne posent problème que lorsque vous essayez de les imprimer. Ou exécutez le fichier via un système qui ne peut traiter que des caractères imprimables. Tant que tout le monde traite le fichier comme les données binaires qu'il est (vous ne devriez pas vraiment appeler cet ASCII - qui d'ailleurs n'a que 7 bits) tout va bien. – Thilo

+0

Merci pour votre réponse! Je vais enregistrer les caractères dans un fichier txt, puis je vais le compresser en utilisant un logiciel, winzip par exemple. Je ne suis pas sûr que ce soit possible. – LiuGui

+0

Je pense que cela empêcherait beaucoup de confusion si vous appeliez cela un fichier binaire et lui donniez une extension différente, disons ".bin". Y a-t-il une raison pour laquelle vous ne pouvez pas? –

Répondre

1

Cela ne devrait pas poser de problème. Que ce soit un fichier texte ou binaire ou quoi que ce soit est juste une convention. Tout dépend de la façon dont le programme interprète les données. Un éditeur de texte non-unicode affichera charabia lorsque vous ouvrez un fichier texte codé UTF-32, même si les données sont "texte". De même avec votre programme. Vous pouvez nommer le fichier avec .jpg et tant que votre programme sait comment le gérer, tout devrait bien se passer.

Assurez-vous simplement de lire et d'écrire en mode binaire. Certains langages de programmation font de petites quantités de traitement pour le "mode texte", comme le remplacement d'un retour à la ligne par le retour à la ligne de la plate-forme.

+0

Merci pour votre réponse! Un autre problème, si je sauvegarde le caractère dans un fichier .txt, alors je vais utiliser un logiciel (par exemple, winzip) pour le compresser. Quand je lis le fichier, je le décompresse d'abord et ensuite convertis le caractère en nombre binaire de 16 bits. Je pense que c'est possible de faire ça? – LiuGui

+0

Vous venez de décrire comment le faire, c'est définitivement possible :). Une chose à prendre en compte serait une manipulation spéciale par winzip de fichiers texte. Il devrait être assez intelligent pour ne pas regarder seulement l'extension, mais si vous trouvez n'importe quel paramètre pour le désactiver ce serait génial. –