function WanJoChg(Src : string; p_mode : Boolean):string;
var sImsi : String;
I : Integer;
Code : Word;
begin
I := 1;
While I <= Length(Src) do begin
if Src[I] < #128 then sImsi := sImsi + Src[I]
else begin
Code := (Byte(Src[I]) shl 8) + Byte(Src[I+1]);
if p_mode then Code := KSSM2KS(Code)
else Code := KS2KSSM(Code);
if Code = 0 then sImsi := sImsi + ' '
else sImsi := sImsi + Chr(Hi(Code)) + Chr(Lo(Code));
Inc(I);
end;
Inc(I);
end;
Result := sImsi;
end;
한글을 완성형 <-> 조합형 해주는 펑션중 일부 입니다
다른건 대충이라도 하겠는데 이 펑션은 감도 못잡겠어요..
shl의 역활과 Src[I] 이거는 머고;;
답변좀 부탁드립니다..
일반 스트링은 (여기서 Src : string)...
string은 255Byte를 쓸수 있으며 첫번째 바이트에는 길이가 들어 있어요
예로 Src := 'ABCD';
이경우 Src[0] <= 4;길이가 들어가 있고
Src[1] = 'A' Src[2] = 'B' Src[3] = 'C' Src[4] = '4'
이런식으로 있죠
아래 루틴을 보면 I := 1 이렇게 시작하죠 바로 0번째는
길이가 들어 있어서 1 부터 시작한것 입니다.
두번째로 Shl 을 말씀 드릴께요
Shl 은 비트 연산자 입니다.
한번 이 코드를 볼까요
Src[I] := 'A'; Src[I+1] := 'B'; 이렇게 가정해보죠;
Code := (Byte(Src[I]) shl 8) + Byte(Src[I+1]);
Src[i] 를 좌측으로 8번 비트 이동을 하고 그자리에
Src[I+1]을 갖다 놓은거죠
즉, 'A' = 1000001 'B' = 1000010 (비트)
1000001 shl 8 => 100000100000000
+ 1000010
=100000101000010
= 16706(10진수)
그래서 Code에는 'AB' 이런식으로 저장됩니다.
정 이해가 힘들다 싶으면
Code := Byte(Src[I]) * 256 + Byte(Src[I+1]);
이렇게 해도 결과는 같습니다.
그럼 이만 즐코..