*Теория* | Как работать с двоичными данными?

Ответить
Аватара пользователя
Gerdewski

*Теория* | Как работать с двоичными данными?

Сообщение Gerdewski »

помогите!!!!!! ни как не могу понять как работать с двоичными данными, например хочу конвертировать из двоичных данных в шеснатитиричные воспользовался борландской процедурой bintohex результат совсем не тот.
Аватара пользователя
Gerdewski

Re: *Теория* | Как работать с двоичными данными?

Сообщение Gerdewski »

А какой результат нужен? Поподробней пожалуйста.
Аватара пользователя
Gerdewski

Re: *Теория* | Как работать с двоичными данными?

Сообщение Gerdewski »

Вообще нас в институте учили так чтобы перевести Ч2 в Ч16 надо взять число, например, 11011(в двоичной)и разделить её на тетрады справа на лево(по четыре элемента)если в крайней левой нехватает цифер дополнить нулями затем каждую тетраду записать в 16 числами. например число 11011-получается левая тетрада 0001 правая 1011-отсюда разлогая по разрядам первую тетраду там понятно что 1 вторую 1 +(1+1)+(0)+(1+1+1+1+1+1+1+1)=11 что есть B(в 16)затем пишем что получилось от первой тетрады слева а то что получилось от правой справо и получаем 1B
Аватара пользователя
sandycrazy

Re: *Теория* | Как работать с двоичными данными?

Сообщение sandycrazy »

готовые процедуры врядли есть.. проще самому ручкам написать, "bezumes" написал как))
Аватара пользователя
sandycrazy

Re: *Теория* | Как работать с двоичными данными?

Сообщение sandycrazy »

например в двочном формате "1111" в шеснацатиричном будет "F" у меня получается 313500 не могу понять как действует это процедура BINTOHEX обьясните пожалуйста
Аватара пользователя
bezumes

Re: *Теория* | Как работать с двоичными данными?

Сообщение bezumes »

нашел с помощью рамблера может поможет

Из двоичной в шестнадцатеричную (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 Ну че получилось? если нет выложи свой код
Аватара пользователя
Guest

Re: *Теория* | Как работать с двоичными данными?

Сообщение Guest »

как действует первый код я знаю меня интересует борландский вариант вот мой код


Цитата:



var

b:array[byte] of char;

t:array[byte] of char;

begin

b:='';t:='';

StrpCopy(b,edit1.Text);

bintohex(b,t,sizeof(b));

label1.Caption:=t;
Ответить

Вернуться в «Программирование и базы данных»