注:プロジェクトに変更を加えたい場合は、このリポジトリkaitai_struct をフォークしないでください。代わりに、上記のファイル ツリーで変更するコンポーネントを選択し、その個別のコンポーネントをフォークします。
これは包括的なリポジトリであり、プロジェクト全体を簡単にチェックアウトできるようにコンポーネントをサブモジュールとしてのみ含んでいます。この README を変更しない限り、編集できるリポジトリはありません。
Kaitai Struct は、ファイルまたはメモリ内に配置されたさまざまなバイナリ データ構造 (つまり、バイナリ ファイル形式、ネットワーク ストリーム パケット形式など) を記述するために使用される宣言型言語です。
主なアイデアは、特定の形式を Kaitai Struct 言語で 1 回だけ記述し、その後、サポートされているプログラミング言語の 1 つでksc
を使用してソース ファイルにコンパイルできるということです。これらのモジュールには、記述されたデータ構造をファイル/ストリームから読み取り、理解しやすい優れた API でアクセスできるパーサー用に生成されたコードが含まれます。
ファイルやネットワーク ストリームからバイナリ データ構造を読み取り、それらを何らかの方法でメモリ内に表現して簡単にアクセスできるようにする、繰り返しが多く、エラーが発生しやすく、デバッグが難しいコードを作成していることに気付いたことがありますか?
Kaitai Struct は、この作業を簡単にしようとしています。バイナリ形式を一度記述するだけで、誰もが自分のプログラミング言語から、クロス言語、クロスプラットフォームでそれを使用できるようになります。
Kaitai Struct には、フォーマット サブモジュール リポジトリで利用できるフォーマット記述の増大するコレクションが含まれています。
もちろん。 GIF ファイル (一般的な Web 画像形式) のヘッダーを説明する、次の単純な.ksy
形式記述ファイルについて考えてみましょう。
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
これは、GIF ファイルは通常.gif
拡張子を持ち、リトルエンディアン整数エンコーディングを使用することを宣言します。ファイル自体は 2 つのブロックで始まります。最初にheader
が来て、次にlogical_screen
が来ます。
87a
または89a
) を識別するさらに 3 バイトがあります。image_width
とimage_height
2 バイトの符号なし整数ですflags
、 bg_color_index
、 pixel_aspect_ratio
それぞれ 1 バイトの unsigned int を受け取りますこの.ksy
ファイルは、 Gif.cs
/ Gif.java
/ Gif.js
/ Gif.php
/ gif.py
/ gif.rb
にコンパイルでき、すぐに .gif ファイルをロードして、たとえば幅やサイズなどにアクセスできます。身長。
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 ());
より完全なクイック スタート ガイドについては、ドキュメントの JavaScript のメモを参照してください。
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 } "
もちろん、この例は、Kaitai Struct で実行できることの非常に限られたサブセットのみを示しています。詳細については、チュートリアルとドキュメントを参照してください。
公式 Kaitai Struct コンパイラは、次の言語のソース モジュールへの.ksy
のコンパイルをサポートするようになりました。
Kaitai Struct プロジェクト全体をチェックアウトする最も簡単な方法は、他のすべての部分がすでにサブモジュールとしてインポートされているメイン プロジェクト リポジトリをダウンロードすることです。使用:
git clone --recursive https://github.com/kaitai-io/kaitai_struct.git
--recursive
オプションに注意してください。
あるいは、Kaitai Struct スイートを構成する個々のサブプロジェクトをチェックアウトすることもできます。彼らです:
.ksy
ターゲット プログラミング言語で書かれたパーサー ソース コードに変換するコンパイラー.ksy
ファイルとして記述されたバイナリ構造のライブラリ通常、KS で説明されている形式をプロジェクトで使用するには、次の手順が必要です。
.ksy
ファイルを作成します。.ksy
ファイルをターゲット言語ソース ファイルにコンパイルし、そのファイルをプロジェクトに含めます詳細については、チュートリアルとドキュメントを参照してください。