2010-02-22 7 views
1

동적 정수 크기를 사용하는 매우 효율적인 프로토콜을 구문 분석하는 C로 파이썬 모듈을 개발 중입니다. 이 프로토콜을 사용하여 전송 된 정수는 C의 'short'에 해당하는 크기에서 'long long'까지의 범위가 될 수 있습니다.C에서 동적 정수 유형 다루기?

프로토콜에는 전송되는 변수의 유형을 지정하는 바이트가 있습니다 (짧은에서 긴 long까지). 그러나 코드에서이를 처리하는 방법을 모르겠습니다. 지금 당장 무효 포인터를 설정하고 전송할 값의 크기로 메모리를 할당하고 atoi, atol 및 atoll을 사용하여 포인터를 설정합니다. 문제는 그 값에 액세스 할 수 있어야하고 나중에 캐스팅하지 않으면 그렇게 할 수 없다는 것입니다.

이 문제를 해결하는 좋은 방법은 무엇입니까?

답변

4

중 하나는 항상 로컬로 long long에 저장하거나 크기에 플래그로 구성된 struct 모든 가능한 유형의 union에 넣어.

+0

저는 struct/union을 사용하는 방법에 대해 약간 혼란 스럽습니다. 간단한 예가 있습니까? – user278423

+0

그런 다음 코드에서 코드에 액세스 할 때 항상 유니온을 길게 캐스팅 했습니까? 아니면 그 깃발을 끄고 그에 따라 캐스팅해야합니까? – user278423

+0

'.flag'을 끄고 해당 멤버 ('.ubyte','.ulong' 등)를 읽습니다. –