Q&A

  • WideString 을 바이트 배열에 담고 싶답니다.
안녕하세요~

WideString 의 내용을 파일로 쓰기 전에 바이트 배열에 담으려고 하는디 변경이
쉽지 않네요... ^^;

아래 코드는 변경이 잘 되는지를 테스트 하는 샘플인디 예상외의 결과가....

procedure TForm1.Button1Click(Sender: TObject);
var
  w : WideString;
  b : array [0..5] of byte;
  c : array [0..5] of char;
  wc : array [0..3] of WideChar;
begin
  w := '하하하';
  CopyMemory(@wc[0],@w,3);
  CopyMemory(@b[0],@w,6);
  CopyMemory(@c[0],@w,6);
end;


위의 소스를 실행하고 메모리 덤프 하면 각각의 변수에는 다음과 같은 같이 들어가 있습니다.

w   : $58 $D5 $58 $D5 $58 $D5
wc : $7C $53 $15 $00 $00 $00 $00 $01
b   : $7C $53 $15 $00 $6C $F7
c   : $7C $53 $15 $00 $6C $F7

음... 알수가 없네요...
제가 원하는 결과는 Byte 배열에 WideString 과 동일한 데이터가 들어가는거 입니다.
손쉽게 해결하는 방법 없을까요?
2  COMMENTS
  • Profile
    최용일 2005.04.25 21:23
    안녕하세요. 최용일입니다.

    아래와 같이 하세요.

        w := '하하하';
        CopyMemory(@wc[0],@w[1],6);
        CopyMemory(@b[0],@w[1],6);
        CopyMemory(@c[0],@w[1],6);

    문자열(string, WideString)은 포인터라서 @W하시면 포인터 자체를 참조합니다. 값을 참조하실려면 @W[1]로 하셔야 됩니다.

    CopyMemory함수는 Byte단위로 작동합니다. wc에 w값을 담으실려면... 3이 아니라 6이 되어야 합니다.

    ^^ 항상 즐코하세요..

  • Profile
    전상현 2005.04.26 03:27
    안녕하세요

    답변 감사합니다
    타겟변수에 신경 쓰느라 소스 변수에 문제가 있다는걸 몰랐네요 ㅋㅋㅋ
    덕분에 쉽게 해결 되었습니다.
    @w[1] 보단  Pointer(w) 가 외관상 좋아보여설 이렇게 사용 했슴다
    감사함다~