Главная страница
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.028 c
15-1192365094
Alien1769
2007-10-14 16:31
2007.12.02
Антивирус для 64-разрядной Висты


3-1185457647
Квэнди
2007-07-26 17:47
2007.12.02
Триггер в MySql


2-1194685836
Виктор007
2007-11-10 12:10
2007.12.02
Настройки программы


2-1194456145
NaRuTo
2007-11-07 20:22
2007.12.02
Как сделать так чтобы числа не повторялись.


15-1193945573
Ricks
2007-11-01 22:32
2007.12.02
В шоке от украинских новостей...