2014-09-02 2 views
1

저는 현재 추상 구문 표기법 1을 연구 중이며 ITU-T Recommendation X.690을 읽고 있습니다. 문단 8.3.2에서 15 페이지ASN 정수의 기본 인코딩 규칙

는이 기록되어

정수 값의 부호화의 내용 옥텟은 하나 이상의 옥텟으로 구성하는 경우, 첫번째 옥텟의 비트 (8)의 다음 비트 두 번째 옥텟 :

  1. 은 모두 1이 아니어야합니다.
  2. 이 모두 0이되어서는 안됩니다.

주 -이 규칙은 정수 값이 항상 가능한 가장 작은 수의 8 진수로 인코딩되도록합니다.

정수는 항상 가능한 가장 작은 수의 옥텟으로 인코딩되므로 첫 번째 옥텟은 0이 아니어야 함을 이해합니다.

하지만 어떨까요? 기본 인코딩 규칙을 사용하여 65408 (1111 1111 1000 0000) 값을 인코딩하려면 어떻게해야합니까?

답변

1

정수는 항상 옥텟의 가능한 최소 수, 첫 번째 옥텟은 0이되어서는 안된다.

필요하지 않습니다. 정수의 최상위 비트가 1로 설정된 경우 값은 음수로 간주됩니다 (부호있는 정수의 경우). 정수 양수를 나타 내기 위해 0의 선두 옥텟이 추가됩니다. 그것은 일반적으로 있습니다. http://msdn.microsoft.com/en-us/library/windows/desktop/bb540806(v=vs.85).aspx

+0

그러면 -128을 어떻게 인코딩합니까? – Geoffroy

+0

간단하게 : 02 01 80 (전체 TLV) – Crypt32

+0

및 +128 : 02 02 00 80 – Crypt32

0

인코딩은 2의 보수입니다. 0000 0000의 선두 옥텟이 필요합니다. 두 번째 옥텟의 비트 8이 1이 될 것이므로 인용 부호 규칙에 위배되지 않습니다.

+0

그런 -128 내가 0000 0000에 선도적 인 옥텟이 필요합니다 인코딩 : 여기

는 정수 인코딩에 대한 좋은 기사를 무엇입니까? – Geoffroy