2014-04-09 3 views
2

소켓에서 읽고 모든 출력을 소켓으로 전달하고 싶습니다. C에서는 구조체에 포인터를 전달하고 구조체의 크기를 나타내는 정수를 전달합니다.구조체를 버퍼로 사용

그러나 D에는 실제로 포인터가 아니라 배열이 있습니다. 소켓에서 D 구조를 읽으려면 어떻게해야합니까?

struct MyStruct { 
    ubyte myVar; 
} 

MyStruct myStruct; 
socket.receive(myStruct); // How to do this 

답변

3

일반적으로, 당신은 어떤 메모리 부족 다음 슬라이스, 포인터로 캐스팅하여 ubyte []를 얻을 수 있습니다 :

대화방에
ubyte[] buffer = (cast(ubyte*)&myStruct)[0 .. myStruct.sizeof]); 

사람이 몇 일 전에 더를 보였다 단락이 된 방법이지만, 그게 무엇인지 기억하지 못합니다 ...

AD 배열은 개념적으로 포인터와 길이 쌍이므로 C 포인터와 정수와 같습니다.

BTW for Sockets에서는 전체 구조체를 한 번에 채울 수있는 충분한 데이터가 없기 때문에 반환 값을 확인하는 것을 잊지 마십시오! 열려있는 네트워크에서 배열/구조체가 완전히 채워지지 않는 하나의 패킷 일 수있는 데이터가있는 즉시 반환합니다.

+0

반환되는 실제 데이터 양을 확인해야한다는 것을 알고 있습니다. 예제를 빨리 보여주었습니다. 나는 지금 이것을 사용할 것이다. –

+0

이 방법의 결과는 '오류 : MyStruct에서 ubyte *로 변환 할 수 없습니다.' –

+0

죄송합니다. 문자를 남겼습니다. myStruct의 주소를 취한 다음 캐스팅하고 조각화해야합니다. –

관련 문제