안녕하세요~
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 과 동일한 데이터가 들어가는거 입니다.
손쉽게 해결하는 방법 없을까요?
아래와 같이 하세요.
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이 되어야 합니다.
^^ 항상 즐코하세요..