2009-12-08 3 views
1

당신은 내가 구조체를 제작하고 reinterpret_cast를 사용하지만 사용하는 방법을 잘 메신저에 대해 읽어고정 길이의 이진/알파 메시지를 해체하는 가장 빠른 방법은 무엇입니까?

field = 'type', length = 2, type = 'alphanumeric' 

field = 'length', length = 2, type = 'binary' (edit:length = 2 means 16 bit) 
... 
... 

and so on 

같이 정의 필드가 C++에서 고정 길이 메시지를 구문 분석하는 가장 빠른 또는 가장 좋은 방법으로 무엇을 제안 또는 더 좋은 방법이 있다면. 구문 분석

, 내가 '유형 = X'같은 사람이 읽을 수있는 형식으로 추출 의미 '길이 = 15'등

+1

가능하면 메모리에로드 룩업 테이블을 사용해보십시오. 단순 비교는 디코딩보다 훨씬 빠릅니다. – Breakthrough

+0

바이너리 형식의 의미는 무엇입니까? '길이 = 2'는 16 비트 수량 또는 00-99를 의미합니까? –

+0

여기 length = 2는 16 비트를 의미합니다 – randomThought

답변

2

이 무슨 뜻인가?

char* binaryMessage; //From somewhere 
struct Fields { 
    short type; // 2 bytes 
    short length; // 2 bytes 
}; 
Fields* fields = reinterpret_cast<Fields*>(binaryMessage); 
std::cout << "Type = " << fields->type; 
std::cout << "Length = " << fields->length; 

더 안전한 대안은 boost::basic_bufferstream입니다 :

basic_bufferstream<char> stream(binaryMessage, lengthOfMessage, std::ios_base::in); 
Fields fields; 
stream >> fields.type; 
stream >> fields.length; 
+0

이것은 하나의 방법이지만 reinterpret_cast는 사용하기에 꽤 위험하기 때문에 실제로 안전합니다 – randomThought

관련 문제