Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для bezumes

Пользователь


Сообщения: 68
Благодарности: 1

Профиль | Отправить PM | Цитировать


нашел с помощью рамблера может поможет
Из двоичной в шестнадцатеричную (BinToHex)
1. Далеко не самый оптимальный способ, зато наглядно демонстрирующий алгоритм конвертирования из двоичного представлением числа в шестнадцатеричную: исходная строка разбивается на тетрады (части по 4 символа) и заменяется на соответствующие им элементарные шестнадцатеричные числа.
Код: Выделить весь код
function BinToHex(const BinStr: string): string; 
const BS: array[0..15] of string[4] = 
(?0000?,?0001?,?0010?,?0011?,?0100?,?0101?,?0110?,?0111?,?1000?,?1001?, 
?1010?,?1011?,?1100?,?1101?,?1110?,?1111?); 
HS: array[0..15] of Char = (?0?,?1?,?2?,?3?,?4?,?5?,?6?,?7?,?8?,?9?, 
?A?,?B?,?C?,?D?,?E?,?F?); 
var s,h: string; 
i: integer; 
Err: boolean; 
begin 
Result := ??; 
s := BinStr; 
if (s[Length(s)] = ?b?) or (s[Length(s)] = ?B?) then 
Delete(s, Length(s), 1); 
// дополнение строки нулями, пока ее длина не кратна 4 
while (Length(s) mod 4) <> 0 do s := ?0? + s; 
while Length(s) > 0 do 
begin 
Err := true; 
h := Copy(s,1,4); 
Delete(s,1,4); 
for i := 0 to 15 do 
if h = BS then 
begin 
Result := Result + HS; 
Err := false; 
break; 
end; 
if Err then 
begin 
Result :=??????; 
Exit; 
end; 
end; 
end;
Код: Выделить весь код
 А так эту задачу решили программисты Borland (модуль Classes): 
procedure BinToHex(Buffer, Text: PChar; BufSize: Integer); 
const 
Convert: array[0..15] of Char = ?0123456789ABCDEF?; 
var 
I: Integer; 
begin 
for I := 0 to BufSize - 1 do 
begin 
Text[0] := Convert[Byte(Buffer[i]) shr 4]; 
Text[1] := Convert[Byte(Buffer[i]) and $F]; 
Inc(Text, 2); 
end; 
end;
Hijri Ну че получилось? если нет выложи свой код

Последний раз редактировалось bezumes, 13-07-2006 в 15:14.


Отправлено: 10:25, 13-07-2006 | #6