뭐 역시 소켓통신을 써보진 않아서 맞을지는 모르겠으나,
변수에 어떤 값을 복사 할때를 생각하면 같은 맥락일거라고 생각합니다.
그래서... 두 가지 방법이 있는데요.
1) 8바이트 변수를 미리 0 으로 초기화.
__int64 target=-1; //0xFFFFFFFFFFFFFFFFFFF
memset(&target, 0, 8); //0 으로 8바이트 초기화
char source[5]={0x05,0x04,0x03,0x02,0x01};//보낼데이터
memcpy(&target,source,5); //전송?
ShowMessage(IntToHex(target,8)); //확인
2) 받은 데이터를 1바이트 변수로 캐스팅 해서 6번째 주소를 참조하여 3 바이트를 0으로 채움.
__int64 target=-1; //0xFFFFFFFFFFFFFFFFFFF
char source[5]={0x9A,0x78,0x56,0x34,0x12};//보낼데이터 0x123456789A
memcpy(&target,source,5); //전송?
memset(&((char*)&target)[5],0,3); //6번째 부터 3바이트를 0으로 채움
ShowMessage(IntToHex(target,8)); //확인
아마 2번이 실제로 원하는 답일 듯 싶습니다.
여기서, 변수의 값은 실제 메모리공간에 바이트 단위로
역순으로 들어 있다는 것을 주의 하셔야 합니다.
(실제론 비트 단위로 역순이지만...)
따라서 앞의 6자리(3바이트)를 초기화 하고 싶다면 뒤의 3바이트를 초기화 해야 합니다.
도움이 되셨기를...
제임스 님이 쓰신 글 :
: PC와 PLC소켓통신중입니다. 어떤 헥사값을 계산해서 5바이트 값을 얻었는데 8바이트로 처리를 해야되서
: 나머지 앞에 자리를 0x00으로 처리하여 8바이트를 얻고 싶습니다.
: 어떻게 해결할 수 있을까요? 계산값이 4바이트 이거나 3바이트 이여도 나머지 앞자리를 0x00으로 채워야 하는 상황입니다.
: 답변 부탁드리겠습니다. 헥사값 0x00은 NULL문자라 PLC장비에서는 입력 받을 수 없는 건가요?