Nota: Si desea realizar cambios en el proyecto, no desembolse este repositorio kaitai_struct . En su lugar, elija el componente que desea modificar en el árbol de archivos anterior y bifurca ese componente individual.
Este es un repositorio general, que contiene los componentes solo como submódulos para facilitar el consulta de todo el proyecto. A menos que desee modificar este ReadMe, no es el repositorio donde puede hacer ediciones.
Kaitai Struct es un lenguaje declarativo utilizado para describir varias estructuras de datos binarios establecidas en archivos o en la memoria: es decir, formatos de archivo binario, formatos de paquetes de flujo de red, etc.
La idea principal es que un formato particular se describe en el lenguaje de Kaitai Struct solo una vez y luego se puede compilar con un ksc
en los archivos de origen en uno de los lenguajes de programación compatibles. Estos módulos incluirán un código generado para un analizador que pueda leer la estructura de datos descrita de un archivo / transmisión y darle acceso a él en una API agradable y fácil de competir.
¿Alguna vez se ha encontrado escribiendo un código repetitivo, propenso a errores y difícil de debilitar que lee estructuras de datos binarios de la transmisión de archivo / red y de alguna manera las representa en la memoria para un acceso más fácil?
Kaitai Struct intenta facilitar este trabajo: solo tiene que describir el formato binario una vez y luego todos pueden usarlo desde sus lenguajes de programación: el lenguaje cruzado, la plataforma cruzada.
Kaitai Struct incluye una creciente colección de descripciones de formato, disponibles en el repositorio de submódulos de formatos.
Seguro. Considere este archivo simple de descripción del formato .ksy
que describe el encabezado de un archivo GIF (un formato de imagen web popular):
meta :
id : gif
file-extension : gif
endian : le
seq :
- id : header
type : header
- id : logical_screen
type : logical_screen
types :
header :
seq :
- id : magic
contents : ' GIF '
- id : version
size : 3
logical_screen :
seq :
- id : image_width
type : u2
- id : image_height
type : u2
- id : flags
type : u1
- id : bg_color_index
type : u1
- id : pixel_aspect_ratio
type : u1
Declara que los archivos GIF generalmente tienen una extensión .gif
y usan la codificación entera de Little Endian. El archivo en sí comienza con dos bloques: Primero viene header
y luego viene logical_screen
:
87a
u 89a
).image_width
e image_height
son 2 byte Unsigned INTSflags
, bg_color_index
y pixel_aspect_ratio
Tome 1 byte Unsigned int cada Este archivo .ksy
se puede compilar en Gif.cs
/ Gif.java
/ Gif.js
/ Gif.php
/ gif.py
/ gif.rb
y luego, al instante, uno puede cargar el archivo .gif y acceder, por ejemplo, es ancho y altura.
Gif g = Gif . FromFile ( "path/to/some.gif" ) ;
Console . WriteLine ( "width = " + g . LogicalScreen . ImageWidth ) ;
Console . WriteLine ( "height = " + g . LogicalScreen . ImageHeight ) ;
Gif g = Gif . fromFile ( "path/to/some.gif" );
System . out . println ( "width = " + g . logicalScreen (). imageWidth ());
System . out . println ( "height = " + g . logicalScreen (). imageHeight ());
Consulte las notas de JavaScript en la documentación para obtener una guía de inicio rápido más completa.
var g = new Gif ( new KaitaiStream ( someArrayBuffer ) ) ;
console . log ( "width = " + g . logicalScreen . imageWidth ) ;
console . log ( "height = " + g . logicalScreen . imageHeight ) ;
local g = Gif : from_file ( " path/to/some.gif " )
print ( " width = " .. g . logical_screen . image_width )
print ( " height = " .. g . logical_screen . image_height )
let g = Gif . fromFile ( " path/to/some.gif " )
echo " width = " & $ g.logicalScreen.imageWidth
echo " height = " & $ g.logicalScreen.imageHeight
$ g = Gif:: fromFile ( ' path/to/some.gif ' );
printf ( " width = %d n" , $ g -> logicalScreen ()-> imageWidth ());
printf ( " height = %d n" , $ g -> logicalScreen ()-> imageHeight ());
g = Gif . from_file ( "path/to/some.gif" )
print "width = %d" % ( g . logical_screen . image_width )
print "height = %d" % ( g . logical_screen . image_height )
g = Gif . from_file ( "path/to/some.gif" )
puts "width = #{ g . logical_screen . image_width } "
puts "height = #{ g . logical_screen . image_height } "
Por supuesto, este ejemplo muestra solo un subconjunto muy limitado de lo que Kaitai Struct puede hacer. Consulte los tutoriales y la documentación para obtener más información.
El compilador oficial de Kaitai Struct ahora admite la compilación .ksy
en módulos de origen para los siguientes idiomas:
La forma más fácil de ver todo el proyecto Kaitai Struct es descargar el repositorio principal del proyecto que ya importa todas las demás partes como submódulos. Usar:
git clone --recursive https://github.com/kaitai-io/kaitai_struct.git
Tenga en cuenta la opción --recursive
.
Alternativamente, se puede consultar subproyectos individuales que consitan Kaitai Struct Suite. Ellos son:
.ksy
en un código fuente de analizador escrito en un lenguaje de programación de destino.ksy
Por lo general, el uso de formatos descritos en KS en su proyecto implica los siguientes pasos:
.ksy
.ksy
en el archivo fuente de idioma de destino e incluya ese archivo en su proyectoConsulte el tutorial y la documentación para obtener más información.