Из string в array of byte

Den4ik003

Всем привет нужна ваша помощь есть функция :
procedure TForm1.Button1Click(Sender: TObject);
var
  i, j : Integer;
  StrTmp : String;
  a : array of byte;
begin
  StrTmp := 'E8B80400';
  SetLength(a, Length(StrTmp) div 2);
  j := 1;
  for i := 0 to High(a) do begin
    a[i] := StrToInt( '$' + Copy(StrTmp, j, 2) );
    j := j + 2;
  end;
  
  // "а" загружены нужные нам данные.
  ...
end;
Данная функция работает не совсем как мне нужно ... она то разделяет каждую 2 строчку и добавляет к ней $ Только она не воспринимает пробелы ... Stroka : '90 90 90 90 90 90'; суть проблемы ^ нужно сделать дабы функция убирала пробелы и вставляла между ними $ + к первой букве в строке пример Stroka : '90 90 90 90 90 90'; Пишу сканер сигнатур ... сканер написал ... а вот запись в память не могу осилить ((ПС может кто предложит свои варианты .. нужно строку перевести в HEX и записать в том порядке в котором она записана в String формате использую ХЕ2
2 ответа

Den4ik003

procedure TForm1.Button1Click(Sender: TObject);
var k,i:integer;
begin
K:=1;
For i:=1 to Length(Stroka) do
begin
 If Stroka[i] = ' ' then
  begin
   SetLength(A,K);
   A[K-1]:=StrToInt('$'+Copy(Stroka,i-2,2));
   ListBox1.Items.Add(IntToStr(A[K-1]));
   Inc(K);
  end;
end;
If Stroka[Length(Stroka)-1] <> ' ' then
 begin
  A[K-1]:=StrToInt('$'+Copy(Stroka,Length(Stroka)-1,2));
  ListBox1.Items.Add(IntToStr(A[K-1]));
 end;
end;
А так?


Den4ik003

ZfoxAK , да норм спс )) ну уже решыл данную проблему вот робочий код кому нужно (P.S - у тебя код переводит из HEx в дек -ну нужно так )))))
function StringReplace(Source,FindText,ReplaceText: string): string;
{Source - строка, в которой будет производиться замена.
 FindText - подстрока, которая должна быть заменена.
 ReplaceText - подстрока, на которую будет произведена заменена}
var
  buf1, buf2, buffer: string;
begin
  buf1 := '';
  buf2 := Source;
  Buffer := Source;
  while Pos(FindText, buf2) > 0 do
  begin
    buf2 := Copy(buf2, Pos(FindText, buf2), (Length(buf2) - Pos(FindText, buf2)) + 1);
    buf1 := Copy(Buffer, 1, Length(Buffer) - Length(buf2)) + ReplaceText;
    Delete(buf2, Pos(FindText, buf2), Length(FindText));
    Buffer := buf1 + buf2;
  Application.ProcessMessages;
  end;
  Result := Buffer;
end;
 
 
Пример Использования :
var
SigPoisk:string;
begin
SigPoisk := StringReplace('27563423#542312#987345234#324234','#','?');//Ищем знаки # и заменяет их на ?
Form1.Caption := SigPoisk;
end;
или тот же код что и сверху только уже в виде процедуры
procedure Revers(StrTmp : String);
 var
  i, j : Integer;
  a : array of byte;
begin
 StrTmp := StringReplace(StrTmp,' ','');
  SetLength(a, Length(StrTmp) div 2);
  j := 1;
  for i := 0 to High(a) do begin
    a[i] := StrToInt( '$' + Copy(StrTmp, j, 2) );
    j := j + 2;
  end;  //С Переменной а делаем что хотим
end;