Форум: "Начинающим";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];
Внизперевод из Двоичного кода Найти похожие ветки
← →
Azize © (2007-11-06 15:57) [0]Есть ли в Делфи какая-нить ф-я переводящая строку вида "0111000011"
т.е. двоичного в число?
Если есть то какая?
← →
Azize © (2007-11-06 15:57) [1]ЗЫ: в десятичное число
← →
Ega23 © (2007-11-06 16:01) [2]см. реализацию Classes.BinToHex
переделать не сложно.
← →
Azize © (2007-11-06 16:20) [3]
> Ega23 © (06.11.07 16:01) [2]
спасибо то что надо
← →
Dib@zol © (2007-11-06 16:27) [4]function BinToTen(s:string):DWORD;
asm
PUSH EBX;
PUSH ECX;
PUSH EDX;
MOV EBX, EAX;
DEC EBX;
XOR EAX, EAX;
XOR EDX, EDX;
MOV ECX, DWORD PTR [EBX-3];
@loop:
CMP BYTE PTR [EBX+ECX], "1";
JNE @next;
BTS EAX, EDX;
@next:
INC EDX;
LOOP @loop;
POP EDX;
POP ECX;
POP EBX;
end;
← →
Dib@zol © (2007-11-06 16:28) [5]блин. не успел :)
← →
Azize © (2007-11-06 16:42) [6]сделал так
Function TwoOfN(N:Word):Word;
Var
wrdFor:Word;
Res:word;
Begin
Res:=1;
if N>0 then
for wrdFor := 1 to N do
Res:=Res*2;
TwoOfN:=Res;
end;
//------------------------------------------
Function BinStrToWord(s:String):Word;
Var
wrdFor:Word;
Res:Word;
Begin
Res:=0;
for wrdFor := 1 to Length(S) do
begin
Res:=Res+StrToInt(Copy(S,wrdFor,1))*TwoOfN(wrdFor-1);
end;
end;
ЗЫ: Кому интерестно
← →
Azize © (2007-11-06 16:46) [7]Гоню
Function BinStrToWord(s:String):Word;
Var
wrdFor:Word;
Res:Word;
Begin
Res:=0;
for wrdFor := 1 to Length(S) do
begin
Res:=Res+StrToInt(Copy(S,wrdFor,1))*TwoOfN(wrdFor-1);
end;
BinStrToWord:=Res;
end;
← →
Dib@zol © (2007-11-06 16:55) [8]var
test = "1011011100001011";
Твоя функция вместо правильных 46859-ти возвернула мне 53485. Работай ;)
← →
Dib@zol © (2007-11-06 16:56) [9]А лучше - бери моё. Работает в 97 с копейками раз быстрее =D
← →
Azize © (2007-11-06 17:27) [10]
> Dib@zol © (06.11.07 16:55) [8]
не мне нужно наоборот
т.е не с сонца байты считать а с начала
т.е.
"10"=1 а не 2
ЗЫ: Для построения кодового дерева
← →
Amoeba © (2007-11-06 17:32) [11]
> Azize © (06.11.07 17:27) [10]
>
>
> > Dib@zol © (06.11.07 16:55) [8]
>
> не мне нужно наоборот
> т.е не с сонца байты считать а с начала
> т.е.
> "10"=1 а не 2
> ЗЫ: Для построения кодового дерева
>
С этого и надо было начинать свой вопрос.
← →
Azize © (2007-11-06 18:08) [12]
> Amoeba © (06.11.07 17:32) [11]
Извиняюсь за причинённое беспокойство
← →
Dib@zol © (2007-11-06 20:23) [13]Аа, тык сразу нужно было говорить, что надо с конца байты считать.
В этом случае можно вот это
> MOV EBX, EAX;
> DEC EBX;
> XOR EAX, EAX;
> XOR EDX, EDX;
>
> MOV ECX, DWORD PTR [EBX-3];
>
> @loop:
> CMP BYTE PTR [EBX+ECX], "1";
Заменить на вот что:MOV EBX, EAX;
// DEC EBX;
XOR EAX, EAX;
XOR EDX, EDX;
MOV ECX, DWORD PTR [EBX-4];
@loop:
CMP BYTE PTR [EBX+EDX], "1";
И вуаля! Функция будет обходить строчку с начала.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c