2011-02-11 5 views
5

나는REAL에 대한 ASN.1 BER 표준은 어떻게 해석해야합니까?

  • X.690 "정보 기술 - ASN.1 인코딩 규칙 : 기본 인코딩 규칙 (BER), 캐 노니 컬 인코딩 규칙 (CER) 및 고유 인코딩 규칙 (DER)의 사양"읽고있다
  • 을 다음 특히

는 §8.5.6.4 (d), 가변 길이의 가수 및 지수로 REAL 값의 바이너리 인코딩에 관하여는 읽

"경우 비트 2 1 11 이다 다음 두 번째 c ontents 옥텟 옥텟의 수 X는 (부호없는 이진 숫자로서)은 지수 값을 인코딩하는 데 사용되는 말 및 세 번째에서 (X 및 3) 번째 를 (포함) 부호화 내용 옥텟은 지수의 값을 2의 보수 2 진수으로 인코딩합니다.   X의 값은 적어도 하나가이어야합니다. 투과 지수   처음 9 개 비트가 모두 0 또는 모두 1 일 수 없다. "

이 중 옥텟으로, 불일치"는 세 번째까지 (X 및 3) [RD] " 실제로 X + 1 옥텟이다.

는이 부분을 명확히 할 수 누구인가?

내가 읽어야한다고 가정 중 하나

이 "... 다음 두 번째 내용 옥텟은 012 인코딩 미만 385,한 옥텟의 수 X말 ... "

또는

".. 상기 제 1~ 제 3 위 (플러스 X 2) ND (포함) 내용 옥텟 ... "

그리고는 X 정말 1의 최소값, 또는 0 가의미입니다1 옥텟?

추가 : : 누구나 BER로 인코딩 된 다양한 값 (의미가있는 옥텟 문자열)의 테스트 데이터를 제공하면 도움이 될 것입니다.

지금까지 인 것을

  • 09 00 = 0
  • 09 01 40
  • = + INF (무한대)
  • 09 01 41 = -INF
  • 09 08 03 2b 31 = "+ 1.0e + 0"= 1.0 (정확한 십진수)
  • 09 05 80 fe 55 55 55 = 1398101.25 (바이너리, 0x555555 * 2^-2)

내가 모르겠어요 예입니다

  • ? 09 06 83 00 fc 00 00 01 = 0.0625 (2 진수, 0x000001 * 2^-4)?

또한 NaN (숫자가 아님)에 대해 정의 된 인코딩이없는 것처럼 보입니다.

답변

2

이것은 색인 생성의 문제라고 생각합니다.

내용 Octet # 1에는 인코딩 유형, 부호 비트, 기본, 배율 인수 및 지수 형식이 포함되어 있습니다.

지수 형식이 '11'이면 다음 옥텟 (Content Octet # 2)은 지수 값을 인코딩하는 데 사용되는 옥텟 수를 나타내는 숫자 X를 포함합니다. 세 번째 내용 옥텟에는 지수 값의 일부가 포함됩니다. 마지막 Content Octet은 x + 3입니다.

CO1 (물건) CO2 (X) CO3 (지수 값) CO ... [X + 3]

X의 최소값이 1 인 경우, X = 1 다음 CO [X + 3 = CO4는 지수 값에 대한 최소 콘텐츠 옥텟 수가 2임을 의미합니다. 이 형태의 가장 짧은 표현 '09 00 절 8.5.6 유효한 인코딩 아니라는 것을 의미

CO1 CO2의 CO3의 CO4

이다. '09 01 04 '및 '09 01 41'입니다.

PLUS-INFINITY 및 MINUS-INFINITY는 8.5.6 절의 규칙과 호환되지 않는 8.5.8 절의 규칙을 통해 인코딩됩니다. 섹션 8.5.6의 규칙

부호화 제로 1 = 1000 0111이

CO1:8 = 1  (Content Octet #1 bit 8) 
CO1:7 = x = 0 (Content Octet #1 bit 7 is dont care, but I'll use 0 for positive) 
CO1:65 = 00  (Content Octet #1 bits 6 and 5 is 00 for base two) 
CO1:43 = x = 01 (Content Octet #1 bits 4 and 3 is scaling factor, so we don't care but I'll make it 01 for a value of one) 
CO1:21 = 11  (Content Octet #1 bits 2 and 1 is the exponent format and '11' is the format in question) 

때문에 콘텐츠 옥텟 번호처럼 진행된다 최소값 이후에는 0x87

콘텐츠 옥텟 # 2 = 0x01로 (X는 1)

콘텐츠 옥텟 번호 = 3 × 00

콘텐츠 옥텟 # 4 = 0x01로

콘텐츠 옥텟 # 3, # 4를 1

의 지수 값을 제공 (영 * 하나)^하나 = 제로 NaN이 옆 무한대 8.5.9에서 정의 될 것이다

0

09 01 42

유효하지

09 06 83 00 00 00 01 FC = 0.0625 (바이너리, 0x000001 * 2^-2)

이되어있어서 D에 8.5.7.4), CO2합니다 (X) "하여야 함 적어도 하나가 되라. " 그러나 이러한 제약 조건을 무시할 때도 결과가 나타납니다.

더 나은 : 09 03 80 fc 01 = 0.0625 (이진, 0x01 * 2^-4)

관련 문제