Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Вниз

Как сделать преобразователь Hex to Bin   Найти похожие ветки 

 
Onward   (2003-11-03 03:22) [0]

Есть стандартый метод, (HexToBin(...)) но этот вариант не подходит.

const
MyVal = $FF;

и сделать так, чтобы я получил с hex значения именно так 11111111 и в таком формате что-бы я смог обратится к каждому значению двоичного кода по индексу... тоесть если индекс будет равен 8(байт), значение будет 1.
Помогите пожалуйста...


 
default   (2003-11-03 03:27) [1]



EBitsError_ = class(Exception);
TRange = (r_8, r_16, r_32);

TBits_ = class
private
FNumber: Cardinal;
FRange: Byte;
function GetBit(Index: Byte): Boolean;
procedure SetBit(Index: Byte; Value: Boolean);
procedure SetRange(Value: TRange);
function GetRange: TRange;
procedure SetNumber(Value: Cardinal);
procedure Error;
public
constructor Create(Number: Cardinal; RangeValue: TRange = r_32);
property Number: Cardinal read FNumber write SetNumber;
property Bits[Index: Byte]: Boolean read GetBit write SetBit; default;
property Range: TRange read GetRange write SetRange;
end;

constructor TBits_.Create(Number: Cardinal; RangeValue: TRange = r_32);
begin

FNumber := Number;
Range := RangeValue

end;

function TBits_.GetRange: TRange;
begin

case FRange of
$F8: Result := r_8;
$F0: Result := r_16;
$E0: Result := r_32;
end;

end;

procedure TBits_.SetRange(Value: TRange);
begin

case Value of
r_8 : begin
FRange := $F8;
FNumber := FNumber and $000000FF;
end;
r_16 : begin
FRange := $F0;
FNumber := FNumber and $0000FFFF;
end;
r_32 : FRange := $E0;
end;

end;

procedure TBits_.Error;
begin

raise EBitsError_.Create("The borders are broken")

end;

function TBits_.GetBit(Index: Byte): Boolean;
asm

// Вход: Index --> DL, Self --> EAX
// Выход: Result --> EAX

MOV DH, Self.FRange
TEST DL, DH
JNZ TBits_.Error
MOV EAX, Self.FNumber
MOV CL, DL
SHR EAX, CL
AND EAX, 1

end;

procedure TBits_.SetBit(Index: Byte; Value: Boolean);
asm

// Index --> DL, Self --> EAX, Value --> CL

MOV DH, Self.FRange
TEST DL, DH
JNZ TBits_.Error
MOVZX EDX, DL
TEST CL, 1
JZ @@ResetBit
BTS Self.FNumber, EDX
RET
@@ResetBit:
BTR Self.FNumber, EDX

end;

procedure TBits_.SetNumber(Value: Cardinal);
begin

if Value <> FNumber then begin
FNumber := Value;
Range := Range;
end;

end;

procedure TForm1.Button3Click(Sender: TObject);
var
b: TBits_;
begin

b := TBits_.Create($FFFFFFEF, r_16);
// b.Number = $0000FFEF
b.Range := r_8;
// b.Number = $000000EF ( $EF = 11101111b )
if not b[4] then begin b[4] := True; b[0] := False; end;
// b.Number = $000000FE ( $FE = 11111110b = 254 )
Caption := IntToStr(b.Number);
Sleep(1000);
try // исключение - обращение к 8 биту при Range = r_8
b[8] := True;
except
on EBitsError_ do Caption := "Обработка исключения класса TBits_";
end;

end;

вот откопал...как понял нужно что-то вроде этого


 
Onward   (2003-11-03 03:29) [2]

Мдаааааа!!! Это для меня тяжело!! Но ВсЕрАвНо СПАСИБО!!!
Поробуем....
Хотя должен быть метод по короче... :)))) Будем искать..


 
default   (2003-11-03 03:35) [3]

function GetBitValue(const Value: Integer; const Index: Byte): Boolean;
begin

Result := Value shr Index and 1 = 1

end;

может это...
PS индексация битов принята с нуля справа налево


 
Onward   (2003-11-03 03:37) [4]

Кстати, Уважаемый default, а вы владеете asm?


 
default   (2003-11-03 03:45) [5]

Onward © (03.11.03 03:37) [4]
смотря, что понимать под "владеете"...
я изучал его в основном для вставок...что-то большое на нём не писал...


 
Onward   (2003-11-03 03:49) [6]

вообще я asm незнаю, нуу вообщем только там

mov ax, a
add ax, b
mov @result, ax

мелоч

а вот как сделать на asm такого рода

for i:=0 to 10 do
for j:=0 to 10 do
FillScreen(i, j, ClRed);

для того чтобы ускорить операцию??


 
default   (2003-11-03 03:53) [7]

Onward © (03.11.03 03:49) [6]
лучший твой учитель это окно отладчика(где асмовый код приведённых тобой циклов есть), справочник по командам и практика
всё)
часто чтобы что-то заоптимизировать сначала пишут на Delphi потом смотрят ассем-ый код в отладчика и оптимизируют
иногда это медленней(может даже часто) чем сразу писать на асме
на сайте Анатолия Подгорецкого есть статьи по оптимизации


 
Onward   (2003-11-03 04:00) [8]

Огромное тебе спасибо!!!
Вот мучаюсь я с этим асмом и ни как.. Но учитываю то что, тот кто идет, тот дойдет до конца...

Когда-то я pascal вообще не знал, а теперь могу что-то сделать:)
Хотя недостатка знания asm это лажа:(((

Стараюсь понять..

А адресочек Анатолия Подгорецкого???

Желаю удачи!!


 
default   (2003-11-03 04:03) [9]

Onward © (03.11.03 04:00) [8]
посмотри по сабжам где он отвечает, зайди в один из них и щёлкни справа от ника значок


 
Onward   (2003-11-03 04:09) [10]

Спасибо! Удачи...


 
default   (2003-11-03 04:11) [11]

Onward © (03.11.03 04:09) [10]
удачи те тоже)спать надо дуть)


 
Anatoly Podgoretsky   (2003-11-03 08:46) [12]

http://www.delphikingdom.com/lyceum/seminar.asp?partID=4&LessonID=11

http://podgoretsky.com/ddp.html



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.035 c
14-42003
Chieftain
2003-10-17 11:59
2003.11.13
Анекдотец про нашего брата


1-41331
Grouzd[E]v
2003-10-30 22:29
2003.11.13
Загрузка Jpeg из Resурсов


3-40914
McSimm2
2003-10-20 10:31
2003.11.13
Количество изменений


4-42219
Пубертанец
2003-09-02 17:39
2003.11.13
2 вопроса


3-41086
Брат
2003-10-23 11:24
2003.11.13
функция Sum в SQL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский