임 내에서 비트 쉽게 acccess 온라인 자습서와 나는 다음과 같은 구조를 가지고 :C++ 노조 데이터 구조의 DirectX 세트를 통해 실행하는 DWORD
struct CUSTOMVERTEX
{
FLOAT x, y, z, rhw; // from the D3DFVF_XYZRHW flag
DWORD color; // from the D3DFVF_DIFFUSE flag
}
의 DirectX 내 기본적인 이해가 가지 그쪽으로 색상 날 리드를 8 비트 알파, 레드, 그린 및 블루 채널로 구성됩니다.
이 채널에 동쪽으로 액세스하려고합니다. 보다는합니다 (CUSTOMVERTEX 구조 내에서) 다음 코드를 여러 번 쓰기 :
이public: int red()
{
return (color & 0x00FF0000) >> 16;
}
나는 노동 조합의 조합, 예를 들어 구조 더 우아한 somution를 작성할 수
struct CUSTOMVERTEX
{
FLOAT x, y, z, rhw; // from the D3DFVF_XYZRHW flag
#pragma pack(2)
union
{
DWORD color; // from the D3DFVF_DIFFUSE flag
struct
{
char a;
char r;
char g;
char b;
};
};
}
그러나이 예상대로 작동 나타나지 않고, R, g의 값은 & B 거의 예컨대 색상 뭐죠의 역을 표시 색상이 0x12345678 인 경우 a = 0x78, r = 0x56 이것은 endieness 문제입니까?
또한이 솔루션에서 기대할 수있는 다른 문제는 무엇입니까? 예 : 색상 멤버에서 오버플로?
내가 묻는 것은 무엇인지 ... 나는 이것을 할 수있는 더 좋은 방법이 있습니까?!
한 가지는 것은 그 안에 필드 구조체는 여분의 바이트로 패딩되어 각각이 2/4/... (플랫폼 특정)의 주소 배수를 갖도록 할 수 있습니다. 즉, 구조체의 실제 메모리 레이아웃에는 모든 필드의 일부가 아닌 바이트가 포함될 수 있습니다. 따라서 구조체의 크기가 sizeof (DWORD)와 같지 않을 수도 있습니다. –