本帖最后由 ljdzxx 于 2009-11-26 18:31:10 编辑

解决方案 »

  1.   

    var 
      i: integer; 
      a: array[0..1023] of Byte; 
    begin 
      for i := 0 to Length(Str)-1 do 
        a[i] := Ord(Str[i+1]); 
    end; 'A' = Char(65);
    65 = Ord('A');
      

  2.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
      Test1, Test3: string;
      Test2: array[0..255] of Byte;
    begin
      SetLength(Test1, 255);
      Test1 := 'test';
      Move(Test1[1], Test2[0], SizeOf(Test2));  // 写  SetLength(Test3, 255);
      Move(Test2[0], Test3[1], SizeOf(Test2)); // 读
      Caption := test3;
    end;
      

  3.   

    ansistring的一个字符就是char,ord(c)一下就是0-255的byte了
      

  4.   

    byte和char的本质上没有区别,在内存中都是一样,占一个字节,只不过如果是byte我们把这个内存看成是一个整数的ansi码,如果是char我们则看成一个字符.这个意思不好表达.....
      

  5.   


    下面的方法速度比用循环快得多:var
      a: array[0..1023] of char;
      b: array[0..1023] of byte;
    begin
      //Char数组
      Move (Str[1], a[0], Length(Str));
      //Byte数组
      Move (Str[1], b[0], Length(Str));
    end;
      

  6.   

    delphi 的string 内是由一个个char连接成的,char有单字节的,也有双字节的.从你的描述来看,你是想要单字节的char组成的string转成byte数组?string的数据结构是先存放string的长度,然后放一个个char如 var  s:string[255];
    s:='abc';
    那么s[0]=3;表示s字符串的长度为3
    s[1]='a'
    s[2]='b'
    s[3]='c'
    如果你只想保存字符,不想保存字符串的长度,那么
    move(s[1],byteArray,length(s));
    这样做的坏处,你无法再从byteArray返回到string如果你想保存长度
    move(s[0],byteArray,length(s)+1);另外如果s的长度大于255,那么保存长度的字节就不止一个了
      

  7.   

    基本上弄明白了,但是关注“Jimy”说的,string的数据结构是先存放string的长度,然后放一个个char 另外如果s的长度大于255,那么保存长度的字节就不止一个了如果长度大于255的串,那么string的存储结构是如何?另如果是双字节的汉字,2个字节拼在一起才能合成一个汉字,那么我任意取一个字节,假设这个字节是汉字的其中一个字节码,怎么知道这个字节是要和前面的字节合成还是和后面的那个字节合成?
      

  8.   

    String有ShortString和AnsiString等几种类型,ShortString最大长度为255字节,声明成s:string[10]这样的类型也是ShortString,ShortString和其他类型如integer一样,都是直接存数据的(不是指针,这个不好表达),而AnsiString,即我们平常这样s:string就是指AnsiString,存储长度达2G,其实它是个指针。判断是不是汉字,如果第一个字节大于127的话,它跟第二个字节就是一个汉字。
      

  9.   

    不考虑双字节charchar 与 Byte在内存中存储是一样的只是因为Delphi是强类型语言,不能直接给值你的代码稍改或用12楼方案
    var 
      i: integer; 
      a: array[0..1023] of Byte; 
    begin 
      for i := 0 to Length(Str)-1 do 
        a[i] := Ord(Str[i+1]); 
    end; 
    12楼方案CopyMemory(@a[0],@Str[1],Length(Str));