그래서 내가 그렇게복사
편집과 같은 설정 구조 한 :
struct PLAYERCOORDINATESSTRUCT
{
int type, x, y;
bool isalive;
bool isconnected;
PLAYERCOORDINATESSTRUCT(int customx, int customy, bool customisalive, bool customisconnected)
{
type=(PLAYERCOORDS);
x = customx;
y = customy;
isalive = customisalive;
isconnected = customisconnected;
}
PLAYERCOORDINATESSTRUCT()
{
type=(PLAYERCOORDS);
}
};
char* bufferwithstructdata = new char[sizeof(PLAYERCOORDINATESSTRUCT)-4];
//-4 since it's missing first int
PLAYERCOORDINATESSTRUCT testdata;
memcpy(&testdata,bufferwithstructdata,sizeof(PLAYERCOORDINATESSTRUCT)-4)
는 내가 문자를 PLAYERCOORDS = 1, 그것은 내 코드의 시작 부분에 정의되어 int 구조체 (구조체의 처음 4 바이트)를 제외하고 이러한 구조체 중 하나에 대한 정보를 모두 보유하고있는 버퍼
오프셋을 사용하여 원본을 올바르게 memcpy하는 방법을 알아 내려고합니다. int x에서 시작하려면 구조 주소에서 4 바이트 떨어져 있어야합니다. 그러나 주소를 4로 추가하려고 시도했을 때 (& testdata + 4) 대신 주소에 40을 추가했습니다. 누구든지 구조에 4 바이트 오프셋을 사용하여 memcpy를 사용하는 방법이나 한 번에 10 바이트 대신 4 바이트 씩 주소를 오프셋 할 수있는 방법에 대한 단서가 있습니까?
감사합니다. +
연산자는 포인터에 적용하기 때문에 그 이유는
memcpy(((char*)&testdata)+4, bufferwithstructdata, sizeof(PLAYERCOORDINATESSTRUCT)-4);
는 정수 지정된 시간을 추가
물건의 크기가 지적되고 :
당신에게 너무 많은 CrazyCasta 감사합니다! 나는 너무 어려워 XD – user2980207
[offsetof] (http://en.cppreference.com/w/cpp/types/offsetof)이 코드를 이식성있게 (그리고 읽기 쉽도록) 만들 수 있습니다. – Lalaland