본문 바로가기

삽질 삽질 스마트 워크 구축

[ASN.1] BER 인코딩시 TLV표기법에서의 Length 길이 구하는 방법

ASN.1 가운데 BER 인코딩 시, 표기법에 대한 공부를 하고 있는데,

자꾸 헷갈리고 아리까리해서 표기법을 쉽게 도식화한 그림을 가져왔다.

 

 

 

인용된 사이트는 인용된 이미지 하단에 표기해두었다.

BER에서의 Length를 표기하는 방법은

 

이미지 출처 : http://www.gorferay.com/ber-tlv-length-fields/

 

 

 

Value의 data가 0부터 127 바이트라면 1바이트로 표기가 되며, 이를 Short Form이라 한다. 

 

 128(8번째 비트)

 64(7번째 비트)

 32(6번째 비트)

 16(5번째 비트)

 8(4번째 비트)

 4(3번째 비트)

 2(2번째 비트)

1(1번째 비트)

 

 

 

 

 

 

 

 

 

http://www.impleotv.com/joomla/ImpleoContent/KLVLib/Help/page_use_in_u_a_v.html

Short Form에서는 가장 큰 비트 즉 마지막 비트를 부호비트로 사용하고 있기 때문에, 8번째 비트가 0이 되어야 한다.

8번째 비트가 1이 되면, Long Form으로 넘어가며, Long Form은  

따라서 Short Form 표기법에서 Length를 가장 크게 표기할 수 있는 크기는 127byte가 된다.

127의 16진수는 '7F'

 

 

http://www.impleotv.com/joomla/ImpleoContent/KLVLib/Help/page_use_in_u_a_v.html

 

Short Form에서 표현하지 못하는 다시 말해 Value의 갯수가 127 바이트를 넘어간다면,

8번째 비트에 Short과 Long을 구분하는 Flag가 1로 되고, Length의 길이를 최하위비트에 기재한다.

 

간단하게 예를들면

 

Value값이 255개라면 Length는 Short 타입으로 표현되지 못하므로, Flag가 1이 되고,

0x81 0xFF로 이루어지게 된다.

 

만약 Value값이 65536이라면... Length는 Long이 되고

0x82 0xFFFF가 되게 된다.

 

쉽고도 어려운 어렵고도 쉬운 TLV의 Length 계산 하는 방법은 이렇게 정리가 된다.

휴...