비트로 타입을 정의 할 수 있는지 궁금합니다. 특히, RTP에 누적 된 누적 패키지 수를 저장하기 위해 24 비트 유형을 정의하려고합니다.비트로 C 타입을 정의하십시오.
그렇지 않은 경우 int에서 3 바이트를 어떻게 memcpy 할 수 있습니까? 내가 이렇게하면 , 나는 겁니다 방법을 잘 모르겠어요 :
memcpy(pkg + 29, (&clamped_pkgs_lost)+(sizeof(char)), 3*sizeof (char));
비트로 타입을 정의 할 수 있는지 궁금합니다. 특히, RTP에 누적 된 누적 패키지 수를 저장하기 위해 24 비트 유형을 정의하려고합니다.비트로 C 타입을 정의하십시오.
그렇지 않은 경우 int에서 3 바이트를 어떻게 memcpy 할 수 있습니까? 내가 이렇게하면 , 나는 겁니다 방법을 잘 모르겠어요 :
memcpy(pkg + 29, (&clamped_pkgs_lost)+(sizeof(char)), 3*sizeof (char));
당신은 적어도 24 비트 비트 필드를 사용하여 유형을 정의 할 수 있지만 비트 필드가 struct
의 구성원이어야합니다
struct {
unsigned pkgs_lost: 24;
};
당신은 비트 필드, 또는 단순한 사용 여부 응용 프로그램 내에서 값을 저장하려면 unsigned long
과 같은 24 비트 이상의 유형이 있어야합니다. RTP 패킷에 복사하면 가장 간단한 방법은 한 번에 한 바이트 씩 복사하는 것입니다. 이는 RTP 패킷의 값이 항상 빅 엔디 언이며 호스트의 엔디안이 알려지지 않았기 때문입니다. 나가는 패킷 바이트 위치 33에서 24 비트 빅 엔디안 번호를 배치 할
pkg[33] = pkgs_lost >> 16;
pkg[34] = pkgs_lost >> 8;
pkg[35] = pkgs_lost;
:
pkg
유형 unsigned char *
의 가정하면, 당신은 뭔가를 할 것입니다.
이 C에서 당신은 단지 그 기본 유형 또는 비트 필드의 측면에서 정수 타입을 정의 할 수 있습니다.
비트 필드는 기발합니다. 당신은 그들의 주소를 가져갈 수 없습니다. 24 비트 만 있으면 공간을 절약 할 수는 없지만 플랫폼에는 8, 16 및 32 비트의 기본 유형 만 있습니다. 이 24 비트를 저장하려면 여전히 3 개의 8 비트 정수 또는 1 개의 32 비트 정수 (또는 1 16 비트 및 1 8 비트)를 사용해야합니다.
카운터처럼 간단하기 때문에 32 비트 정수를 사용하고 싶습니다. 8 개 최상위 비트를 제로 따라서 2 24 값을 -1로 제한
값을 제한하면 3 번째 첫 번째 바이트를 가져 오려면 왼쪽 논리 시프트를 만들어야합니다. 맞습니까? –
귀하의 의견이 보이지 않습니다. –
더 큰 정수에는 좁은 정수를 저장할 수 있습니다. 원하는 비트 만 마스크하십시오.
int main() {
long data;
data & 0xFFFFFF;
}
또는 구조체 멤버에 비트 필드를 정의 할 수 있습니다. 그러나 bitfield 레이아웃이 표준화되지 않았기 때문에 구조체를 디스크에 쓰고 다른 시스템에서 열려고 시도하지 마십시오.
struct {
long data:24;
};
Google의 '비트 필드' –
@MartinJames 비트 필드의 주소를 사용할 수 없기 때문에 'memcpy'와는 관련이 없습니다. 하지만 OP는'memcpy '를 사용해서는 안됩니다. –
'sizeof (char)'는'1'입니다. –