Q&A

  • 메모리상에서의 값과 출력값이 다른데...?
잘 나가나 싶더니만 또 혼자서는 잡을 수 없을꺼 같은 오류에 빠졌습니다..

디버그할때 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로 화면상에 출력해보면 이상한 | 나 점같은 이상한 값들이 나오는겁니까..

위의 다른 값들도 다 마찬가지 현상입니다..



고수님들이시여~~ 도대체 제가 뭘 잘못했단 말입니까..!!

1  COMMENTS
  • Profile
    홍성락 2001.12.12 23:37
    델초 wrote:

    > 잘 나가나 싶더니만 또 혼자서는 잡을 수 없을꺼 같은 오류에 빠졌습니다..

    > 디버그할때 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])) );