¿Existe alguna forma sencilla de escribir datos binarios en un archivo binario como solíamos hacer en C/C++? Por ejemplo, ¿cómo puedo crear un archivo de 4 bytes con un valor entero serializado de 4 bytes sin usar cálculos sofisticados?Escribir archivo binario en Ruby
Respuesta
Puede usar Array#pack y String#unpack para realizar conversiones hacia y desde representaciones binarias. Combínelos con IO#write y IO#read, y listo.
Hay Marshal.dump
y Marshal.load
métodos que puede utilizar.
Aquí hay un enlace: http://en.wikipedia.org/wiki/Serialization#Ruby.
y otro que guarda los datos en un archivo: http://rubylearning.com/satishtalim/object_serialization.html.
Esto funciona bien, pero todavía no pudo obtener el archivo de 4 bytes utilizando la siguiente: File.open ('test.bin', 'wb') {| archivo | archivo << Marshal.dump (12345)}, obtengo un archivo de 6 bytes. El problema es que necesito crear un archivo binario de formato propietario, este archivo consta de registros, cada uno de ellos es de longitud fija, registro de estilo C con números enteros, bytes, etc. Gracias por la respuesta realmente rápida. –
Sin preocupaciones. La respuesta de Pesto parece muy prometedora. –
En mi humilde opinión, ruby no fue hecho para tales tareas. Si tiene que escribir mucho en archivos binarios, sería más fácil escribir algunas funciones c para eso y llamarlas desde ruby, lo cual es bastante fácil usando swig. Estoy haciendo lo mismo en este momento para escribir un simulador de redadas.
Correcto, probablemente Ruby estaba destinado a otras cosas, pero ya tenemos una aplicación de Rails bastante grande y acabamos de enfrentar esta necesidad de operar con archivos binarios. Sin embargo, gracias por su respuesta, podríamos considerar escribir la extensión nativa en C/C++. –
El problema con la escritura de esas funciones en C/C++ es que si lo hace, podría vincularlas a una implementación específica de Ruby. Ver http://stackoverflow.com/questions/3292610/what-version-of-ruby/3294275#3294275 – sampablokuper
Recientemente tuve un problema similar para el trabajo. Usé la gema BinData y funcionó bien. Usted acaba de hacer algo como:
File.open('test.bin', 'wb') {|file| BinData::Int32be.new(12345).write(file) }
y que no es necesario recordar los códigos de Array#pack
.
¡Gracias! ¡Excelente! Ahora tengo curiosidad de cómo se implementa en la gema ... –
la gema está haciendo el embalaje/desembalaje. código fuente [aquí] (https://github.com/dmendel/bindata). como dice la respuesta, simplemente evita que tengas que recordar cómo/qué códigos de paquete usar – Andrea
- 1. Codificación :: UndefinedConversionError al escribir un archivo binario
- 2. Analizando un archivo binario en Ruby
- 3. No se puede escribir un archivo binario
- 4. Bash: escribir número entero de archivo binario
- 5. ¿Cómo escribir en el archivo en Ruby?
- 6. Escribir un archivo descargado binario en un disco en Java
- 7. Escribir un búfer binario en un archivo en Python
- 8. Lea el archivo binario como una cadena en Ruby
- 9. Escribir en el medio de un archivo binario existente C++
- 10. Lua: escribir valores hexadecimales como un archivo binario
- 11. Escribir en XML en ruby
- 12. Abrir automáticamente un archivo como binario con Ruby
- 13. archivo binario a cadena
- 14. lectura en un archivo binario en Haskell
- 15. ¿Cómo obtengo Ruby 'puts' para escribir datos en un archivo?
- 16. crear archivo binario en bash
- 17. Bash Script - Leer archivo binario
- 18. escribiendo entero en archivo binario (C++)
- 19. Binario "cola" un archivo
- 20. ¿Cómo se escribe un literal binario en ruby?
- 21. escritura utf16 a archivo en modo binario
- 22. Escribir una matriz de estructuras en un archivo binario en C
- 23. escribir una cadena de presentar en modo binario
- 24. Cómo escribir un blob binario en el disco en Informix
- 25. Pregunta fácil: Leer archivo, invertirla y escribir en otro archivo en Ruby
- 26. Escribir y leer el objeto de clase en y desde el archivo binario
- 27. Escribir un archivo binario en bruto con datos de la matriz NumPy
- 28. Escribir una utilidad de línea de comandos en Ruby
- 29. ¿Habría algún motivo para escribir código en binario puro?
- 30. C: leer el archivo binario en la memoria, alterar el búfer, escribir el búfer en el archivo
Sí, creo que la tuya es la mejor respuesta para esta pregunta en particular. +1 –
Gracias por responder, esto funcionó para mí. –
Esto parece lo que quiero hacer, pero todavía no sé cómo hacerlo. ¿Qué formato debo desempaquetar una cadena binaria usando 'String # unpack'? – mehulkar