프로토콜을 통해 패킹 된 이진 데이터 (즉, 변수가 올바르게 정렬되지 않은 경우)를받는 상황을 자주 접하고 데이터는 일반적으로 std :: string, std :: vector 또는 기타 이러한 컨테이너로 제공됩니다. .
내 질문은 그러한 데이터의 압축을 푸는 모범 사례는 무엇입니까? 나는 일반적으로 다음과 같은 것을 수행합니다.
int32_t x = *((int32_t*)charPtr);
또는 반복자의 경우
int32_t x = *((int32_t*)(&(*itt)));
그러나 이것들은 정말 해킹처럼 느껴지고 템플릿 함수로 래핑 될 수 있지만 컴파일러에게 원하는 것을 알려주는 더 직접적인 방법이 없습니까?
정의되지 않은 동작을 피하는 올바른 방법은 다음과 같습니다.
int32_t x;
memcpy(&x, charPtr, sizeof(x));
함수 템플릿으로 래핑 할 수 있습니다.
template <class T,
std::enable_if_t<std::is_trivially_default_constructible<T>::value &&
std::is_trivially_copyable<T>::value, int> = 0>
T unpack(unsigned char* p) {
T val;
memcpy(&val, p, sizeof(val));
return val;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다