2012-07-11 1 views
0

에 16 비트 값을 Spliting. 난 그냥 실제로 일련 번호가 단순히 짧은 아니라고 발견이 계획을 고려 하지만, : 나는 값 258 (\ X02의 \의 X01)와 시퀀스 번호를 보낼 경우에 따라서이 질문은이 게시물에 관련된 12 + 4 파이썬 구조체

 12 bits   4 bits 
Sequence number Fragment number 

을 실제로 것 있다;

나는 실제 시퀀스 번호가되도록 258을 가질 수 있으며,이 방법으로 분할하지 않을 수 있습니다. struct으로 이것을 달성 할 수있는 간단한 방법이 있습니까?

UPDATE :

내가 이렇게되면 네트워크 패킷 생성기 짓고 있어요 : 내가했다 내 위의 질문에 무엇을 의미

나중에

class PacketHeader(Packet): 
fields = OrderedDict([ 
    ("head", "\x00"), 
    ("headpad", "\x00"), 
    ("headlen", "\x1a\x00"), 
    ("presentflag", "\x2e"), 
    ("timestamp", "\x43\x10\x58\x16\xa1\x01\x00\x00"), 
    ("flag", "\x03"), 
    ("Sequencenum", "\x04\x00"), 
###12 bits of this 'short' is Seq num, 4 bits left are if this is a fragment or not(if it is, its value will be =>1, and will then represent the frag number.) 

]) 

, 나는 내 수업 전화 다음과 같이 패킷을 보내십시오.

send(PacketHeader(Sequencenum=257)) 
send(PacketHeader(Sequencenum=258)) 
send(PacketHeader(Sequencenum=259)) 

짧은 마커로 변환해야합니다. 마비 (이 경우에는 257을 말하게한다), 그 16 비트 단락의 프래그먼트 번호를 나타내는 4 비트를 처리한다. 항상 조각 번호를 0으로 설정하는 것을 선호하지만 Sequencenum이 올바르게 증가되도록하십시오.

미리 감사드립니다. 라인을 따라

+1

그것은 전혀 분명 당신이 무엇을하지, 그리고 당신이 원하는. 제목에 "16 비트 값 나누기"라고 표시되어 있지만 텍스트에는 "나누지 않음"이라고 표시되어 있습니다. 당신은 명확히 할 수 있습니까? 조각 번호 : –

+0

나는 당신이이 경우에, 예상 값을 가지고 짧은 분할 않는 방법을 알고 싶습니다 0 시퀀스 번호 : 513 희망이 도움 :) – user1473508

+0

난 당신이 시퀀스 번호를 디코딩 있다고 생각 잘못된 엔디 언. – icktoofay

답변

0

뭔가 :

number_to_send = (sequence_number << 4) + fragment_number 
bytes_to_send = struct.pack("!H", number_to_send) 

그리고 다시 :

sequence_number = struct.unpack("!H", bytes_to_send)[0] >> 4 
관련 문제