android CDMA 문자 pdu 패키지 분석
pdu 압축 패키지와 압축 해제는 대체적으로 유사하고 정반 과정이기 때문에 그 중의 한 과정만 이해할 수 있다.
다음은 pdu 해석 과정에 대한 설명입니다.
cdma 문자 pdu 패키지 분석:
문자 내용: 국가는 모두 경축하고, 나라는 두 나라가 함께 모인다.
캡처된 pdu 패키지:
00 00 02 10 02 02 04 01 46 AA 8406 01 0C 08 2F 00 03 11 11 C0 01 1A 20 62 B7 EA DD B4 FA 82 A062 F4 30 01 62 DD B2 B7 EA 71 22 B7 12 B8 30 01 08 03 06 12 10 11 1538 37 08 01 40 0A 01 40
BearerData.java
while (inStream.available() > 0) {
boolean decodeSuccess = false;
int subparamId = inStream.read(8);
int subparamIdBit = 1 << subparamId;// 1 , 8
if ((foundSubparamMask & subparamIdBit) != 0) {
throw new CodingException("illegal duplicate subparameter (" +
subparamId + ")");
}
.......// ,Mask ,
}
첫 번째 필드:
00: 메시지 타입, 메시지 ID 등을 받습니다.
private static boolean decodeMessageId(BearerData bData, BitwiseInputStream inStream)
throws BitwiseInputStream.AccessException, CodingException
{
final int EXPECTED_PARAM_SIZE = 3 * 8;
boolean decodeSuccess = false;
int paramBits = inStream.read(8) * 8;
if (paramBits >= EXPECTED_PARAM_SIZE) {
paramBits -= EXPECTED_PARAM_SIZE;
decodeSuccess = true;
bData.messageType = inStream.read(4);
bData.messageId = inStream.read(8) << 8;
bData.messageId |= inStream.read(8);
bData.hasUserDataHeader = (inStream.read(1) == 1);
inStream.skip(3);
}
if ((! decodeSuccess) || (paramBits > 0)) {
Log.d(LOG_TAG, "MESSAGE_IDENTIFIER decode " +
(decodeSuccess ? "succeeded" : "failed") +
" (extra bits = " + paramBits + ")");
}
inStream.skip(paramBits);
return decodeSuccess;
}
두 번째 필드:
0002 10 02: 문자 메시지의 teleservice, 그 값은 (16진법) 1002 즉 4098.
첫 번째 필드:
02 04 01 46 AA 84: 문자 발송 주소.내용: 0146 AA 84
00000001 0100 0110 1010 1010 1000 0100
1위: 0: 대표 모드
2위: 0: 디지털 모드
다음 8개의 비트는 길이를 나타냅니다. 여기서 0000 01 01은 5,5*4=20이고 앞으로 20자리는 전화번호입니다.
4
첫 번째 필드:
0601 0C: SMSTL_BEARER_RPLY_OPT
첫 번째 필드:
082F00 03 11 11 C0 01 1A 20 62 B7 EA DDB4 FA 82 A0 62 F4 30 01 62 DD B2 B7 EA 71 22 B7 12 B8 30 01 08 03 0612 10 11 15 38 37 08 01 40 0A 01 40
08: 메시지 내용 표시
2F: 필드 길이.47
부분 1
0003 11 11 C0:
00:MessageId
1111 C0:00010001 0001 0001 1100 0000
0001: DELIVER 메시지 표시
00010001 0001 1100: 메시지 id
0: HEADERIND.
부분 2
011A 20 62 B7 EA DD B4
FA82 A0 62 F4 30
01 62 DD B2 B7 EA
71 22 B7 12 B8 30
01 08
01: 필드 유형.
20 62 B7 EA DD B4 FA 82 A0 62 F4 30 01 62 DD B2 B7 EA 71 22 B7 12 B8 3001 08
바이너리 표현은 다음과 같습니다.
0010 0000 0110 0010 1011 0111 1110 1010 1101 1101 1011 0100 1111 1010 1000 0010 1010 0000 0110 0010 1111 0100 0011 0000
0000 0001 0110 0010 1101 1101 1011 0010 1011 0111 1110 1010
0111 0001 0010 0010 1011 0111 0001 0010 1011 1000 0011 0000
0000 0001 0000 1000
(
2062 B7 EA DD B4 FA 82 A0 62 F4 30 01 62 DD B2 B7 EA 71 22 B7 12 B8 3001 08
바이너리 표현은 다음과 같습니다.
00100000 0110 0010 1011 0111 1110 1010 1101 1101 1011 0100 1111 1010 1000 0010 1010 0000 0110 0010 1111 0100 0011 0000
0000 0001 0110 0010 1101 1101 1011 0010 1011 0111 1110 1010
0111 0001 0010 0010 1011 0111 0001 0010 1011 1000 0011 0000
0000 0001 0000 1000
)
20: 상위 5비트: 00100 즉 4, 인코딩 방식: 유니버설
20:의 3위, 62의 5위는 00001100은 10으로 10개의 유니버설이 있음을 나타낸다.
62의 뒤 3개의 유니세드와 B7의 8bit, EA의 앞 5개의 bit를 더하면 다음과 같다.
010110 1111 110 1 56fd 유니코드 코드를 보면 나라
0101 1011 1011 0110 5bb6 유니코드 코드를 보면 집임을 알 수 있습니다.
부분 1
0306 12 10 11 15 38 37
시간 스탬프 12년 10월 11일 15시 38분 37초
08 01 40 0A 01 40
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.