Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
4-1172864916
DevilDevil
2007-03-02 22:48
2007.12.02
Стек:


15-1194078732
Стоун
2007-11-03 11:32
2007.12.02
память


3-1184959483
NewZ
2007-07-20 23:24
2007.12.02
SQL запрос к двум таблицам.


15-1193719649
Separator
2007-10-30 07:47
2007.12.02
Распознование баркодов


2-1194603858
alsov
2007-11-09 13:24
2007.12.02
Почему StrToFloat обрезает строку?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский