현재의 디자인은 임베디드 시스템과 PC 사이의 통신을 포함합니다. 여기서 PC는 항상 구조체 설계로 윙윙 거리고 있습니다.struct를 패킹 할 때 바이트 정렬과 endianess를 처리하는 좋은 방법은 무엇입니까?
두 시스템은 내가 다룰 필요가있는 다른 엔디안을 가지고 있습니다. 그러나 문제를 해결하기 위해 매 4 바이트마다 간단한 바이트 순서 전환을 수행 할 수는 없습니다. 그것은 구조체에 의존하는 것으로 밝혀졌습니다. 예를 들어
, 이와 같은 구조체 :
{
uint16_t a;
uint32_t b;
}
는 A와 B 사이의 패딩이 발생할 것이다. 결국 엔디안 스위치는 패딩 바이트가 있기 때문에 a 및 b에 고유해야합니다. 하지만 구조체 내용을 변경할 때마다 엔디안 스위치 논리를 변경해야하기 때문에보기가 흉하게 보입니다.
패딩이 들어올 때 구조체의 요소를 배열하는 좋은 전략은 무엇입니까? 구조체의 끝에 패딩 바이트 만 있도록 요소를 재 배열해야합니까?
감사합니다.
답장을 보내 주셔서 감사합니다. 엘리먼트의 수가 올라간다면, 엘리먼트를 하나씩 보내면 너무 많은 오버 헤드가 전달 될 것인가? 하지만 당신의 생각에 따르면, 유일한 대안은보다 구체적인 바이트 순서 로직을 설계하는 것입니다. – TroubleSDE
그것은 실제 구현에 많이 의존합니다 (데이터를 전송하는 링크 등을 통해). 버퍼링의 일종을 사용하면 전송 오버 헤드 (전송 프로토콜 헤더에서 읽음)를 저장하고 코드를 읽기가 더 쉬울 수 있습니다 (즉, 데이터를 직렬화 및 역 직렬화하는 함수와 실제 전송을 수행하는 함수가 있습니다). – peterph