Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.02;
Скачать: CL | DM;

Вниз

перевод из Двоичного кода   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
4-1179585869
alex1961
2007-05-19 18:44
2007.12.02
Windows server 2003 setvice pack 2


15-1193841830
@!!ex
2007-10-31 17:43
2007.12.02
Она сдала зачет!


15-1193597283
artkil
2007-10-28 21:48
2007.12.02
Вопрос по созданию пиринговой сети


15-1193763526
Time
2007-10-30 19:58
2007.12.02
Помощь по делфи Молодому учителю


11-1179663505
Виктор007
2007-05-20 16:18
2007.12.02
Мерцинае контролов на форме