比如string:='25 00 07 00 00 00 08 00 00 00 D5 04 00 00 00 00 00 00'
怎么才能将string按空格分割到byte数组中呢?
谢谢

解决方案 »

  1.   

    var
      PCh: PChar;
      i, j: integer;
    begin
      PCh := PChar(string);
      i := lstrlen(PCh);
      
      for j := 0 to i do
      begin
        byte[j] := PChar + j;
      end;
    end;
      

  2.   

    const
      s = '25 00 07 00 00 00 08 00 00 00 D5 04 00 00 00 00 00 00';
    begin
      ExtractStrings([' '],[' '],s,Memo1.Lines);
    end;Memo1中为值为:
    -------------------
    25
    00
    07
    00
    00
    00
    08
    00
    00
    00
    D5
    04
    00
    00
    00
    00
    00
    00
      

  3.   

    slzzg(懒虫) 的方法我试过了,不行的
    请问还有更好的方法吗?
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject); 
    var 
    s: tstringlist; 
    i: integer; 
    begin 
    s := tstringlist.Create; 
    s.DelimitedText:='XXX YYYY RR XX WW'; 
    s.Delimiter:=' '; 
    for i:=0 to s.Count-1 do 
      ShowMessage(s.Strings[i]); 
    s.free;
    end; 
      

  5.   

    楼上的可以,但是怎么把s.Strings[i]赋值到byte数组中呢?
      

  6.   

    给你一段我自己用的分割字符串到数组的代码,你可以直接拿来用。然后直接将数组中的每个项目StrToInt就可以得到你想要的结果了。type
      TStrArray = array of string;function  DecodeStr2Array(Source: string; SepChar : char; var Rst: TStrArray): integer;
    //根据指定分隔符将字符串分解为独立数据并存入数组
    //Source,源字符串
    //SepChar,分隔符
    //Rst,结果数组
    var
      Count, CutFrom, Len: word;  procedure AddStr(Str: string);
      begin
        SetLength(Rst, length(Rst) + 1);
        Rst[high(Rst)] := Str;
      end;
    begin
      Result := 0;
      SetLength(Rst, 0);
      len := length(Source);
      if len > 0 then
      begin
        CutFrom := 1;    for count := 1 to len do //逐字符扫描字符串,遇到分隔符时则切断串获得数据
          if (Source[count] = SepChar) then
          begin
            AddStr(Copy(Source, CutFrom, count - CutFrom));
            CutFrom := count + 1;
            if Count = Len then
              AddStr('');
          end else
            if count = len then
            begin
              AddStr(Copy(Source, CutFrom, count - CutFrom + 1));
              Break;
            end;    Result := length(Rst);
      end;
    end;
      

  7.   

    谢谢楼上的,可是我是要放在byte数组中(因为要应用到发包)
    就是怎么才能得到像这样的形式
    const temp: array[0..17]of BYTE = ($25,$00,$07,$00,$00,$00,$08,$00,$00,$00,$D5,$04,$00,$00,$00,$00,$00,$00);
      

  8.   


    function GetByte(const V: Char): Byte;
    begin
      case V of
        'a'..'f':
          Result := Ord(V) - Ord('a') + 10;
        'A'..'F':
          Result := Ord(V) - Ord('A') + 10;
      else
        Result := Ord(V) - Ord('0');
      end;
    end;function BinaryDecode(const S: string; output: PByte; outlen: Integer): Integer;
    var
      R: PByte;
      P: PChar;
      I: Integer;
    begin
      Result := Length(S) div 3;
      if outlen < Result then
        raise Exception.Create('outlen too small');  P := PChar(S);
      R := output;
      for I := 1 to Result do
      begin
        R^ := GetByte(P[0]) * 16 + GetByte(P[1]);
        Inc(R);
        Inc(P, 3);
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      len: Integer;
      temp: array [0..1000] of Byte;
      S: string;
    begin
      S := '25 00 07 00 00 00 08 00 00 00 D5 04 00 00 00 00 00 00';
      Len := BinaryDecode(S, @Temp[0], sizeof(Temp));
      ShowMessage(IntToStr(Len));
    end;
      

  9.   

    to 楼主:很简单,你得到字符串数组之后,只需要做一个简单的循环:var
      ByteArray: array of byte;
      StrArray: array of string;
      Count: integer;
    begin
      //分解并获取字符串数组
      //转换
      SetLength(ByteArray, Length(StrArray));
      for Count := Low(StrArray) to High(StrArray) do
      begin
        //可以在这里加入有效性判断和错误处理
        ByteArray[Count] := StrToInt(StrArray[Count]);
      end;
    end;
      
    end;
      

  10.   

    procedure TForm1.Button1Click(Sender: TObject);
    const
        myString = '25 00 07 00 00 00 08 00 00 00 D5 04 00 00 00 00 00 00';
    var
        tempStr: string;
        output: array of byte;
        i: integer;
    begin
        tempStr := StringReplace(myString, ' ', '', [rfReplaceAll, rfIgnoreCase]);
        SetLength(output, Length(tempStr) div 2);
        HexToBin(PChar(tempStr), PChar(@output[0]), Length(tempStr) div 2);
        //上面转化完毕,下面是结果输出
        for i := 0 to Length(output) - 1 do
        begin
            memo1.Lines.Add(IntToStr(output[i]));
        end;
    end;