Q&A

  • 반각문자를 전각으로 변환할때~
function Func_BangakToJungak(asSource: string): string;
var
  cnt: Integer;
  srcLen: Integer;
  asc: Integer;
begin
  Result := '';
  srcLen := Length(asSource);

  for cnt := 1 to srcLen do
  begin
    if ByteType(asSource, cnt) = mbSingleByte then
    begin

      asc := ord(asSource[cnt]);
      //반각 영문 및 특수문자
      if (asc >= 33) and (asc <= 126) then
      begin
        //전각으로 변환
        asSource[cnt] := Chr(asc + 163128);
      end;

    end;
    Result := Result + asSource[cnt];
  end;
end;

팁게시판에 전각을 반각으로 변환하는 소스를 참고로
코딩했는데요...실제로 리턴값은 엉뚱한 값이 나옵니다.

어디가 잘못된 건가요? 답변 부탁드립니다.
1  COMMENTS
  • Profile
    최용일 2003.09.20 20:54
    안녕하세요. 최용일입니다.

    전각문자는 두바이트인데...

    asSource[cnt] := Chr(asc + 163128);

    위와 같이 넣으시면 전각문자의 하위바이트만 들어가게 되죠...

    그리고 더해주는 값이 잘못되었네요...

    아래와 같이 해보세요...

    function Func_BangakToJungak(Src: string): string;
    var
        Index: Integer;
        Code: Integer;
    begin
        Result := '';
        for Index := 1 to Length(Src) do
        begin
            if ByteType(Src, Index) = mbSingleByte then
            begin
                Code := Byte(Src[Index]);
                Result := Result + Chr(Hi(Code + 41856)) + Chr(Lo(Code + 41856));
            end
            else
            begin
                Result := Result + Src[Index];
            end;
        end;
    end;

    ^^ 항상 즐코하세요...