Delphi的客户端和C#的服务器端,发送字符串,C#好说,有现成的函数实现字符串和byte数组的转换,而且使用各种编码包括Unicode都很方便。可是Delphi怎么把字符串转换成byte数组(当然)呢?因为发送的时候只能发送byte数组啊,还有如果有中文的话就得用Unicode编码,怎么设置呢? 主要是不知道怎么实现Delphi中字符串和byte数组的相互转换,还有怎么用unicode编码~小弟初接触Socket编程,希望有高手解答一下~

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    const
      s = 'abcd1234';
    var
      arr: array of Byte;
      i: integer;
      s2: string;
    begin
      //string to byte array
      SetLength(arr,Length(s));
      CopyMemory(arr,PChar(s),Length(s));
      for i := 0 to High(arr) - 1 do
        ShowMessage(chr(arr[i]));  //byte array to string
      SetLength(s2,Length(arr));
      CopyMemory(PChar(s2),arr,Length(arr));
      ShowMessage(s2);
    end;
      

  2.   

    var
      Ansi_Str: String;
      WideChar_Byte_Array: Array of Byte;
      iReturn: Integer;
    begin
      Ansi_Str := '要传输的内容';
      //目标字节数 = AnsiCode字数 * Unicode单字的字节数
      SetLength(WideChar_Byte_Array, Length(Ansi_Str) * sizeof(WideChar));
      iReturn := MultiByteToWideChar(936, 0, PChar(Ansi_Str), Length(Ansi_Str), PWideChar(@WideChar_Byte_Array[0]), Length(Ansi_Str) * sizeof(WideChar));
      //iReturn返回的是实际的Unicode字数,所需要根据iRet设置字节数组的有效长度
      SetLength(WideChar_Byte_Array, iReturn * sizeof(WideChar));  //释放字节数组
      SetLength(WideChar_Byte_Array, 0);
      WideChar_Byte_Array := Nil; 
    end;
      

  3.   

    1楼的前辈应该能实现字符串到byte数组的转换,但是如果有中文还是不行吧..2楼的兄弟,你的方法可以把16位字符串转换为byte数组,但是怎么转回来呢?接收了以后还是要转回字符串显示啊~
      

  4.   

    1楼的代码当然可以,中文你可以用Unicode编码。自己动手稍改改就可以了,难道总是期待别人写成现成的代码给你?
      

  5.   

    Copymemory,很万能的啊,自己看帮助去
      

  6.   

    str := '121212121212';
    buf : array[0..99] of byte;move(str[1],buf[0],length(str));至于编码,谁接收谁转
      

  7.   

    中文也没问题,把BYTE ARRAY转成字符串就行了.
      

  8.   

    一个中文字符会被转换并存于两个Byte中.
      

  9.   

    我是用string保存字符串
    直接用PChar转的,也一样可以发
      

  10.   

    在delphi中string本质上是字节的数组
      

  11.   


    帅哥,动态数组也需要手动释放么?我一直以为动态数组是delphi自己释放的