Q&A

  • String을 UNICODE로 바꾸려면..
스트링을 유니코드로 바꾸려합니다.
그런데.. Str 이 hello일 경우
SendBuff 가 바로 HELLO로 값이 오네요..
H
#0
E
#0
L
#0
L
#0
O
#0
이런식으로 나오게 하려면 어떻게 해야하는지...
도와주세요~

procedure TForm1_1.TCP_Control(Str:String);
  WideCount :integer;
  SendSize: array[1..4] of Char;
  SendBuff: array[1..Max_BuffSize] of WideChar;
begin
  WideCount := (Length(Str)+1) * 2;

  ZeroMemory(@SendBuff, Max_BuffSize);     // 데이터 내용
  StringToWideChar(Str, @SendBuff, WideCount);


4  COMMENTS
  • Profile
    최용일 2008.03.04 06:03
    SendBuf에 님께서 원하시는 대로 들어가 있습니다.
    무엇이 문제인지요?

  • Profile
    송현경 2008.03.04 23:32
    H
    #0
    E
    #0
    L
    #0
    L
    #0
    O
    #0
    이렇게 나오길 바라는데요
    H
    E
    L
    L
    O
    이렇게 나오거든요...


  • Profile
    최용일 2008.03.05 02:32
    쩝~ 단순히 표현상의 문제네요...

    WideChar배열을 AnsiChar배열에 집어 넣으세요.
    WideChar는 2바이트로 되어있고 첫번째 바이트에 H#0이 들어 있습니다. 단지 출력할때 AnsiChar로 변환해서 출력하기때문에 #0이 안보일뿐입니다.

    <!--CodeS-->
    const
      Max_BuffSize = 1024;
    var
      Str: string;
      WideCount: Integer;
      W: WideString;
      SendBuffW: array[1..Max_BuffSize] of WideChar;
      SendBuffA: array[1..Max_BuffSize*2] of Char;
      Index: Integer;
    begin
      Str := 'Hello';
      WideCount := (Length(Str)+1) * 2;
      ZeroMemory(@SendBuffW, Max_BuffSize);
      StringToWideChar(Str, @SendBuffW, WideCount);

      ZeroMemory(@SendBuffA, Max_BuffSize*2);
      Move(SendBuffW, SendBuffA, Max_BuffSize*2);
      for Index := 1 to WideCount do
        Memo1.Lines.Add(IntToHex(Integer(SendBuffA[Index]), 2));
    end;
    <!--CodeE-->

  • Profile
    송현경 2008.03.05 04:07
    이것때문에 무지 시간 보냈는데 바로 해결