잘 나가나 싶더니만 또 혼자서는 잡을 수 없을꺼 같은 오류에 빠졌습니다..
디버그할때 evaluate/modify로 메모리에 들어온 값을 보면 다 정상적으로 들어왔는데
그걸 메시지나 메모 상에 찍어보면 왜 엉뚱한 것들(숫자도 아닌 기호)이 들어가냐 이겁니다..
문제의 코드는 아래와같습니다..
Packet : Array[0..7] of char;
test : test_struct;
wSize : Word;
begin
wSize := sizeof(test_struct);
test.age := 5; //age : Byte type
test.iq := 6; //iq : Byte type
test.weight := 7; //weight : word type
test.height := 8; //height : longword type
zeromemory(@Packet, sizeof(wsize));
copymemory(@Packet,@test, 1);
RichEdit1.Lines.Add('Searched Version : '+ Packet );
ShowMessage(Packet);
/////////////////////////////////////////////
이 packet라는 값을 디버그할때 찍어보면 분명 메모리 상에는
(#5, #0, #0, #0, #0, #0, #0, #0) 이런식으로 이쁘게(?) 5라는 값이 들어옵니다..
그런데 왜, 어찌하여 RichEdit나 Message로 화면상에 출력해보면 이상한 | 나 점같은 이상한 값들이 나오는겁니까..
위의 다른 값들도 다 마찬가지 현상입니다..
고수님들이시여~~ 도대체 제가 뭘 잘못했단 말입니까..!!
> 잘 나가나 싶더니만 또 혼자서는 잡을 수 없을꺼 같은 오류에 빠졌습니다..
> 디버그할때 evaluate/modify로 메모리에 들어온 값을 보면 다 정상적으로 들어왔는데
> 그걸 메시지나 메모 상에 찍어보면 왜 엉뚱한 것들(숫자도 아닌 기호)이 들어가냐 이겁니다..
>
> 문제의 코드는 아래와같습니다..
>
> Packet : Array[0..7] of char;
> test : test_struct;
> wSize : Word;
>
> begin
>
> wSize := sizeof(test_struct);
>
> test.age := 5; //age : Byte type
> test.iq := 6; //iq : Byte type
> test.weight := 7; //weight : word type
> test.height := 8; //height : longword type
>
> zeromemory(@Packet, sizeof(wsize));
> copymemory(@Packet,@test, 1);
> RichEdit1.Lines.Add('Searched Version : '+ Packet );
> ShowMessage(Packet);
> /////////////////////////////////////////////
> 이 packet라는 값을 디버그할때 찍어보면 분명 메모리 상에는
> (#5, #0, #0, #0, #0, #0, #0, #0) 이런식으로 이쁘게(?) 5라는 값이 들어옵니다..
> 그런데 왜, 어찌하여 RichEdit나 Message로 화면상에 출력해보면 이상한 | 나 점같은 이상한 값들이 나오는겁니까..
> 위의 다른 값들도 다 마찬가지 현상입니다..
>
> 고수님들이시여~~ 도대체 제가 뭘 잘못했단 말입니까..!!
////////////////////////////////////////////////////////////////
원래 그릇은 (test) 바이트나 워드로된 정수형변수이나
그대로 계승받는 그릇은(Packet) 문자형배열변수 이므로
원래의 문자'5'가아닌 숫자5를 넣고 있으므로 아스키코드에서 5번째문자를 뿌리는겁니다. 따라서 ord를 사용 바꿔야합니다.
1.전체 다바꿈
for i := 0 to 7 do begin
str(ord(Packet[i]),s);
Packet[i] := s[1];
end;
RichEdit1.Lines.Add('Searched Version : '+ Packet );
2.앞자리만 구하시려면
RichEdit1.Lines.Add('Searched Version : '+ intToStr(ord(Packet[0])) );