귀하는 손님 이십니다
로그인
회원가입
  
  델마당 공식 은행계좌
  하나은행 227-910235-83607
  예금주 이상국(운영진)
프로젝트 게시판
투표게시판
델마당소개
기초부터 활용까지! 델파이 교육 - 데브기어
 광고문의 :
lazarus lazarus 입니다.
글내용 - lazarus
 rawbytestring 패치 개선.
파르셀
(김도완)
2015-10-23 오후 3:46:28
1894회 조회


첨부파일 다운로드
rawbyte_concat_enhanced_fix_multi_para.zip
함수/프로시져 파라미터에서도 rawbytestring 캐스팅이 가능하도록 했습니다.

아마 이 패치는 문자열 처리 규정에 맞지 않는다며,
받아들이지 않을것 같습니다.

rawbytestring 변수를 사용하거나 타입캐스팅을 사용하지 않는다면,
컴파일러와 rtl에서 처리하는 방법은 원래 방법과 변화가 없습니다.

대충 이렇게 사용할 수 있습니다.

program project2;


uses
  sysutils;

var
  s1 : string;
  sw, sh : widestring;
  s2, s3, s4, s5, dumps : string;
  s : string;
  i : integer;

function test(s1, s2:string):string;
begin
  result:=s1+s2;
end;

procedure dumpstrings(const s:string);
begin
  dumps:='';
  for i:=1 to Length(s) do begin
    dumps:=dumps+' '+IntToHex(Byte(s[i]),2);
  end;
  writeln(s,' ',dumps);
end;

begin
  s1:='1234';
  s2:='Größe ÄÜÖ';
  s3:='abcd';
  s5:='한글';
  sw:=UTF8Decode(s2);
  s2:=UTF8Encode(sw);
  s4:=UTF8Encode(sw);
  sh:=utf8decode(s5);
  s5:=#199#209;
  //s5:=ansitoutf8(s5);
  s :=rawbytestring(s1+s2)+rawbytestring(s3+s4)+rawbytestring(s4+s5);
  dumpstrings(s);
  writeln('ok');
  s :=rawbytestring(s1+s2+s3+s4+s5)+rawbytestring(s1+s2+s3+s4+s5)+utf8string(s1+s2+s3+s4+s5);
  dumpstrings(s);
  writeln('ok');
  s := test(s1 , s4);
  dumpstrings(s);
  writeln('fail');
  dumpstrings(s3+s2);
  writeln('fail');
  s := test(rawbytestring(s3+s2),s2+s3);
  dumpstrings(s);
  writeln('ok,fail');
  dumpstrings(test(rawbytestring(s3+s2),s2+s3+rawbytestring(s2+s3)));
  writeln('ok,fail,ok');
  readln;
end.