안녕하세요? 고수가 되고자 열심히 노력중인 타임입니다.^^
아래소스에서요
integer($80) <-- 요것이 무엇인데 요걸 가지고 2byte 한글을 판단하는거죠?
그리고 훅은 머죠? @는 배열에 쓰는것인가요???
궁금해요~~~ ^o^
그리고 존 주말들 보내시길~
procedure TForm1.Button1Click(Sender: TObject);
var
i, n : integer;
source : string;
cTmp : char;
sTmp : string;
begin
source := '가나ABC다';
n := Length(Source);
i := 1;
while i <= n do begin
sTmp := '';
cTmp := Source[i];
// Double byte char
if ((integer(cTmp) and integer($80)) = integer($80)) then begin
sTmp := cTmp;
Inc(i);
cTmp := Source[i];
end;
sTmp := sTmp + cTmp;
Showmessage(sTmp);
Inc(i);
end;
end
> 안녕하세요? 고수가 되고자 열심히 노력중인 타임입니다.^^
> 아래소스에서요
> integer($80) <-- 요것이 무엇인데 요걸 가지고 2byte 한글을 판단하는거죠?
> 그리고 훅은 머죠? @는 배열에 쓰는것인가요???
> 궁금해요~~~ ^o^
> 그리고 존 주말들 보내시길~
>
>
> procedure TForm1.Button1Click(Sender: TObject);
> var
> i, n : integer;
> source : string;
> cTmp : char;
> sTmp : string;
> begin
> source := '가나ABC다';
>
> n := Length(Source);
>
> i := 1;
>
> while i <= n do begin
> sTmp := '';
> cTmp := Source[i];
>
> // Double byte char
> if ((integer(cTmp) and integer($80)) = integer($80)) then begin
> sTmp := cTmp;
> Inc(i);
> cTmp := Source[i];
> end;
>
> sTmp := sTmp + cTmp;
>
> Showmessage(sTmp);
>
> Inc(i);
> end;
> end
[참고]
integer($80)에서 $는 Hex 즉 16진수를 의미하고, 10진수로 바꾸면 128이 됩니다.
그리고 아스키 코드(이 홈페이지의 화면 좌측의 도구/아스키 코드를 참조)를 보면
Hex로 7F(10진수로 127) 까지가 보통쓰는 영문 아스키 코드 입니다.
Hex로 80에서 FF까지는 한글코드의 사용 부분입니다. 그래서 한글에서는 최상위
Bit(Hex80)가 ON 됩니다.
integer는 word, byte등의 숫자를 integer type으로 변환시켜 줍니다.
정리:
if ((integer(cTmp) and integer($80)) = integer($80)) then begin 의 의미는 cTmp의 최상위 bit가 ON이 되었는지 알아보는 문장입니다.
좋은 주말 보내세요.