type
DATA1 = record
case Integer of
0: (DATA2 : record
INT1 : Integer;
INT2 : Integer;
INT3 : Integer;
INT4 : Integer;
INT5 : Integer;
end);
1: (b : array[0..19] of Char);
end;
var
DATA: DATA1;
---------------------------------------------------------------------
이렇게 선언을 해두고요...
DATA.DATA2.INT1 := 1234567;
DATA.DATA2.INT2 := 2345678;
DATA.DATA2.INT3 := 3456789;
DATA.DATA2.INT4 := 4567890;
DATA.DATA2.INT5 := 5678901;
이렇게 각 변수에 특정값을 대입시킨후에...
DATA.b를 읽어보면
알수 없는 이상한 문자들로 변환되어서 읽혀지거든요...
근데, 문제가 있는데요...
그 변환되어진 DATA.b값이란게 중간중간에 '#0' 즉, NULL값이 들어가 있거든요.
그래서 파일로 저장하려고 하면 NULL 앞자리까지만 저장이되고 NULL 이후부터는 String 특성상 읽지를 못해 무시되어 버리네요.
저 변환되어진 DATA.b를 통신으로 날려줘야 하는데, 제값이 안나오는 이상 어케 할 수가 없네요.
그래서 제가 강제로 DATA.b를 한자리씩 얽어들여서 chr(0)이면 chr(99)로 바꿔서 전송시키고,
받은쪽에선 다시 chr(99)를 chr(0)으로 바꿔서 읽으면 되긴하는데... 이게 너무 번거로운 일이잖아요.
C++ 에선 저런 형태 그대로 저장을 시키니 알아서 죽~ 붙여서 저장을 해주더라구요.
메모리맵상에서의 연산을 잘못한건지, 아니면 방법에서 잘못된건지, 그것두 아니면 델파이 특성을 몰라서인지...
아시는분 좀 답변좀 해주세요~
어떻게 제대로 해결할수 있겠는지요... ㅜㅜ;
후후.. C++ 에선 알아서 되다녀.. C/C++ , Delphi 모두 스트링은 '널 종료 문자열' 입니다. C나 C++ 에서는 Union 을 쓰면 손쉽져. 그런데 통신으로 내용을 날릴때 Socket.SendText() 함수를 쓰셨군여. Socket.SendBuf() 함수로 보내 보세여.. 다 갈겁니다.. 참 받을 때는 Socket.ReceiveBuf() 함수로 받아야 겠죠.
즐푸하세여..
타락천사..