참고: 프로젝트를 변경하려면 이 저장소 kaitai_struct 를 포크하지 마십시오 . 대신 위의 파일 트리에서 수정하려는 구성 요소를 선택하고 대신 해당 개별 구성 요소를 포크하세요.
이는 전체 프로젝트를 보다 쉽게 확인할 수 있도록 구성 요소를 하위 모듈로만 포함하는 포괄적 저장소입니다. 이 README를 수정하고 싶지 않다면 편집할 수 있는 저장소가 아닙니다.
Kaitai Struct는 파일이나 메모리에 배치된 다양한 바이너리 데이터 구조(예: 바이너리 파일 형식, 네트워크 스트림 패킷 형식 등)를 설명하는 데 사용되는 선언적 언어입니다.
주요 아이디어는 특정 형식이 Kaitai Struct 언어로 한 번만 설명된 다음 ksc
사용하여 지원되는 프로그래밍 언어 중 하나로 소스 파일로 컴파일될 수 있다는 것입니다. 이러한 모듈에는 파일/스트림에서 설명된 데이터 구조를 읽고 멋지고 이해하기 쉬운 API로 액세스할 수 있는 파서용으로 생성된 코드가 포함됩니다.
파일/네트워크 스트림에서 이진 데이터 구조를 읽고 더 쉽게 액세스할 수 있도록 메모리에 표시하는 반복적이고 오류가 발생하기 쉽고 디버깅하기 어려운 코드를 작성해 본 적이 있습니까?
Kaitai Struct는 이 작업을 더 쉽게 만들려고 노력합니다. 바이너리 형식을 한 번만 설명하면 모든 사람이 프로그래밍 언어(언어 간, 플랫폼 간)에서 사용할 수 있습니다.
Kaitai Struct에는 형식 하위 모듈 저장소에서 사용할 수 있는 점점 더 많은 형식 설명 모음이 포함되어 있습니다.
확신하는. GIF 파일(널리 사용되는 웹 이미지 형식)의 헤더를 설명하는 다음 간단한 .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
확장자를 가지며 리틀 엔디안 정수 인코딩을 사용한다고 선언합니다. 파일 자체는 두 개의 블록으로 시작합니다. 먼저 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
파일을 대상 언어 소스 파일로 컴파일하고 해당 파일을 프로젝트에 포함합니다.자세한 내용은 튜토리얼과 문서를 확인하세요.