Q&A

  • 소스 분석좀 해주세요..
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] 이거는 머고;;

답변좀 부탁드립니다..

1  COMMENTS
  • Profile
    이중철 2003.04.30 08:09
    먼저 스트링의 구조부터 말씀 드릴께요..
    일반 스트링은 (여기서 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]);
    이렇게 해도 결과는 같습니다.
    그럼 이만 즐코..