Форум: "Основная";
Текущий архив: 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.04 c