2014-11-14 2 views
0

새로운 기능으로 직렬화를 향상시킬 수 있지만 매우 이상하게 보입니다. 그때데이터의 16 진수 10 진수 인코딩을 향상시킬 수 있습니다.

22 serialization::archive 8 0 0 1 1 0 0 0 0 123 0 0 31 0 0 0 65 65 

우리가 아니오 123 그래서 31를 볼 수있는 클래스를 직렬화 내가 두 멤버

int number // always = 123 

char buffer[?] // buffer with ? size 

와 매우 간단한 클래스 그래서 가끔 buffer[31]에 크기를 설정해야

여기의 문제는 모두 10 진수 형식입니다.

은 지금은 내가이

22 serialization::archive 8 0 0 1 1 0 0 0 0 123 0 0 0 4 0 0 65 65 65 

부스트는 버퍼 크기에 대한 16 진수 전환 한 실제 결과입니다

22 serialization::archive 8 0 0 1 1 0 0 0 0 123 0 0 1024 0 0 0 65 65 --- 

할 전망 buffer[1024]에 버퍼 변경?

통지 다른 값은 십진수입니다.

123에서 1024로 번호를 변경하면 어떻게됩니까?

나는 040을 상상할 것입니까?

22 serialization::archive 8 0 0 1 1 0 0 0 0 1024 0 0 0 4 0 0 65 65 

이것은 설계 상 의도적으로 31이 1F로 변환되지 않는 이유는 무엇입니까? 일관성이 없다.

이것은 split_free에 대한 우리의 부하 기능에 문제가 발생, 우리는이

unsigned int size; 
ar >> size; 

을 수행되었지만이 040 일 때 당신이 생각 하듯이, 그것은

무엇 제로에 :(truncs 이에 대한 권장 솔루션

내가 부스트 1.45.0을 사용했지만, 난 부스트에이 테스트 1_56.0하고 동일

편집 :?. serializat의 샘플 이온 기능

template<class Archive> 
void save(Archive& ar, const MYCLASS& buffer, unsigned int /*version*/) { 
    ar << boost::serialization::make_array(reinterpret_cast<const unsigned char*>(buffer.begin()), buffer.length()); 
} 

MyClass에이 길이 경우 동일한 UNICODE_STRING

http://msdn.microsoft.com/en-gb/library/windows/desktop/aa380518(v=vs.85).aspx

코드를되는 근사 길이를 유지하는 제 소자 부호 INT 와 숯 *에 불과 래퍼 1024 또는 31 그래서 나는 이것이 문제가 될 것이라고 기대하지 않았을 것입니다.

+0

직렬화를 수행하는 코드를 표시해야합니다. – Steve

+0

게시물을 편집하여 코드를 작성하십시오. 4 개의 공백을 들여 쓰게하고 구문 강조 표시를해야합니다. 사람들이 더 쉽게 읽고 더 쉽게 도움을 줄 수 있습니다. – Steve

+0

그것의 지금 이것처럼 스티브. –

답변

0

부스트가 "16 진수로 전환되었습니다"라고 생각하지 않습니다. 나는 솔직히 이것에 대한 경험이 없지만 부스트는 0부터 255까지만 숫자를 저장할 수있는 바이트 배열로 직렬화하는 것처럼 보입니다. 1024는 값이 4 인 바이트이고 값 다음에 바이트가옵니다 0.

0

"왜 31은 1F로 변환되지 않습니까? 일관성이 없습니다"- 귀하의 가정은 잘못된 불일치를 만듭니다. 실제로 추측 할 때 직렬화 보관 형식을 읽을 수 있다고 가정하십시오.

알고 싶으면 코드를 추적하십시오. 그렇지 않은 경우 아카이브 형식을 사용하십시오.

"사람이 액세스 할 수있는 양식"을 원하면 xml_oarchive를 고려하십시오.

관련 문제