-
митя (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]спасибо тебе за отзывчивость добрый человек - всё работет )