2010-11-18 17 views
0

Je travaille actuellement sur un logiciel en Ruby qui est destiné à lire un message binaire à partir d'un fichier, puis à le transmettre sur un socket TCP ou UDP à un programme C écrit par un de mes collègues. Ce programme C doit être capable d'effectuer des opérations au niveau du bit sur ces messages binaires, avant de les renvoyer à mon programme pour comparer les données envoyées et reçues.Comment lire des données binaires à partir d'un fichier et les transférer via des sockets Ruby à un client effectuant des opérations au niveau du bit?

Mon problème actuel concerne la façon dont Ruby semble gérer tout comme des cordes. Je suis relativement nouveau à la langue et je ne suis pas sûr de la façon dont je devrais aborder ce problème. Mon principal souci est de m'assurer qu'aucun changement ne se produise dans le contenu de mes messages binaires avant ou pendant leur transfert initial au programme C.

Toute aide que vous pourriez fournir serait grandement appréciée.

Merci, Martin

+1

Y a-t-il une question quelque part? –

+0

Essayez-le et voir. Si vous avez une question relative à un comportement spécifique, revenez nous voir! :-) – Ashe

+0

Comme Arlen le dit, essayez et voyez, et si cela échoue, montrez-nous votre travail et nous essaierons d'aider. –

Répondre

0

Class: IO Ruby est un bon point de départ. Lisez la première section, en particulier l'indicateur "b" et son lien avec les systèmes d'exploitation. Après cela, read ou read_bytes pourrait être utile. Re: "Ruby semble traiter tout comme des cordes". Ruby voit un fichier comme une séquence d'octets lus sur le disque. C'est ainsi que vous dites à Ruby de lire, traiter et afficher ces octets qui déterminent si les octets sont des lignes de texte, des enregistrements d'un fichier de base de données, une image ou un fichier son. Vous pouvez lire du texte à l'aide de méthodes orientées données, puis inverser et traiter les données sous la forme d'une chaîne. Vous pouvez lire des données "binaires" en utilisant des méthodes de lecture de chaîne, puis les agréger en mémoire et les traiter comme des octets. Ruby est juste l'outil que nous utilisons pour manipuler les octets mais nous sommes ceux qui décident de ce que ces octets signifient.