• митя (29.11.14 00:44) [0]
    procedure hexstr2bin;

     var
     BinaryStream: pStream;
     HexStr:pAnsiChar;
    begin
     HexStr := 'FAA4F4AAA44444';
     BinaryStream := NewMemoryStream;
     try
       BinaryStream.Size := Length(HexStr) div 2;
       if BinaryStream.Size > 0 then
       begin
         //hex2bin(HexStr);
         Str2File('myfile',HexStr);//:=((HexStr));
       end;
     finally
       BinaryStream.Free;
     end;

    end;



    подскажите - люди добрые, как добиться нужного результата: чтобы вместо стоки получить бинарник?
  • L`Autour (29.11.14 21:10) [1]
    Функция есть Hex2Int
    Обрабатывать по 8 символов.
  • L`Autour (29.11.14 21:20) [2]
    И кстати, надо так:
    ...
    BinaryStream.Size := (Length(HexStr) + 1) shr 1;
    ...
    иначе для нечетной длины строки теряется один символ.
  • митя (29.11.14 22:35) [3]
    эт не та функция - она не записывает в бинарник коды символов из которых состоит строка
  • L`Autour (29.11.14 22:46) [4]
    Это как? Коды символов из которых состоит строка -  это та же самая строка по 8 бит на символ. По коду нужно перекодировать каждый символ в 4 бита (и видимо засунуть в поток), то есть сделать Hex2Int. Можно пример того что надо получить в бинарном коде?
  • митя (29.11.14 23:36) [5]
    1=31
    2=32.....
    ff=я.....
    строка:='привет (ПерекодироватьСтрокуВБайты(строка));
    итог = ef f0 e8 e2 e5 f2
    это в гексе так отображается
  • L`Autour (30.11.14 10:34) [6]
    Цикл по строке, где для каждого символа С:
    Int2Hex(Ord(C), 2);
  • митя (30.11.14 11:19) [7]
    написал я вот такой код но он записывае только нули,
    что не так не пойму ?

    procedure TForm1.btnClick(Sender: PObj);

    var
     myfile:file of Byte;
      HexStr,s,st:string;
     m, b,n,d:Integer;
      buf:Byte;

    begin
      HexStr := 'FAA4F4AAA44444';
      s:='';
      b:=1;
     Assign(myfile,'myfile');
     Rewrite(myfile);
    // Reset(myfile);



       for n:=1 to Length(HexStr) div 2  do
       begin
         st :='';
         for d:= 0 to 1 do
         begin

          s:=(s+(hexstr[b]));

          b:=b+1;
    end;
           st:=s ;
          m:=Str2Int('$'+st);  //вот это - ну ни как не могу победить
         buf:=Byte(m);
          BlockWrite(myfile,buf,1);
    end;
       
       Close(myfile);

    end;
  • L`Autour (30.11.14 12:09) [8]
    правильно: Str2Int обрабатывает только цифры и на первом же другом символе заканчивает преобразование. Советую попробовать так:
    ...
     s := '00';
     b := 1;
     for n := (Length(HexStr) div 2)  downto 1 do
     begin
       s[1] := HexStr[b];
       s[2] := HexStr[b + 1];
       Inc(b, 2);
       buf := Byte(Hex2Int(s));
       BlockWrite(myfile,buf,1);
     end;
    ...
  • митя (30.11.14 12:33) [9]
    спасибо тебе за отзывчивость добрый человек - всё работет )
Есть новые Нет новых   [118410   +20][b:0][p:0.002]