Вход  •  Регистрация









По вопросам подключения звоните 6-67-20 7(922)515-56-51 -Мегафон 7(912)461-36-10 -МТС 7(904)833-55-28 -Теле2 7(964)180-28-08 -Билайн
с 08:00 до 22:00
пн - пт

с 10:00 до 22:00
сб - вс


Имя пользователя:

Пароль:



Нужен исходник

Всё о компьютерах и программах....

Модераторы: fillo, logrus

Нужен исходник

Сообщение #1 proxx » 15 янв 2007, 04:59

Нужен исходник кода на делфи или паскале перевода из десятичной в двоичную систему счисления и обратно.

Аватара пользователя
proxx
Хитрый лис
 
Автор темы
Сообщения: 564
Зарегистрирован: 19 янв 2006, 16:17
Последний визит: 20 янв 2015, 16:32
Благодарил (а): 0 раз.
Поблагодарили: 5 раз.
Пол: Оно
Возраст: 24
    Неизвестно Неизвестно



Сообщение #2 BoBr » 15 янв 2007, 09:36

Для перевода в двоичную используй IntToHex, HexToBin
а обратный перевод скорее всего нужно будет написать самому, что несложно .. не помню ф-ю переводящюю Hex в Int (если использовать BinToHex)

Аватара пользователя
BoBr
Главный флудер
 
Сообщения: 377
Зарегистрирован: 18 июл 2006, 21:44
Последний визит: 07 мар 2013, 21:04
Откуда: из исходников
Благодарил (а): 6 раз.
Поблагодарили: 28 раз.
Пол: Муж.
Возраст: 38
    Неизвестно Неизвестно

Re: Нужен исходник

Сообщение #3 i_p » 15 янв 2007, 17:20

proxx пишет:Нужен исходник кода на делфи или паскале перевода из десятичной в двоичную систему счисления и обратно.


Сам писал такую прогу. Посмотрю, может есть.

i_p
Одинокий волк
 
Сообщения: 1543
Зарегистрирован: 15 авг 2005, 16:47
Последний визит: 02 окт 2011, 18:28
Благодарил (а): 46 раз.
Поблагодарили: 34 раз.
Пол: Оно
    Неизвестно Неизвестно

Сообщение #4 AzazeL » 15 янв 2007, 18:51

Код: Выделить всё
function IntToHex(Value: Integer; Digits: Integer): string;
//  FmtStr(Result, '%.*x', [Digits, Value]);
asm
        CMP     EDX, 32        // Digits < buffer length?
        JBE     @A1
        XOR     EDX, EDX
@A1:    PUSH    ESI
        MOV     ESI, ESP
        SUB     ESP, 32
        PUSH    ECX            // result ptr
        MOV     ECX, 16        // base 16     EDX = Digits = field width
        CALL    CvtInt
        MOV     EDX, ESI
        POP     EAX            // result ptr
        CALL    System.@LStrFromPCharLen
        ADD     ESP, 32
        POP     ESI
end;
function HexToBin(Text, Buffer: PChar; BufSize: Integer): Integer; assembler;
begin
asm
        PUSH    ESI
        PUSH    EDI
        PUSH    EBX
        MOV     ESI,EAX
        MOV     EDI,EDX
        MOV     EBX,EDX
        MOV     EDX,0
        JMP     @@1
@@0:    DB       0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1
        DB      -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1
        DB      -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
        DB      -1,10,11,12,13,14,15
@@1:    LODSW
        CMP     AL,'0'
        JB      @@2
        CMP     AL,'f'
        JA      @@2
        MOV     DL,AL
        MOV     AL,@@0.Byte[EDX-'0']
        CMP     AL,-1
        JE      @@2
        SHL     AL,4
        CMP     AH,'0'
        JB      @@2
        CMP     AH,'f'
        JA      @@2
        MOV     DL,AH
        MOV     AH,@@0.Byte[EDX-'0']
        CMP     AH,-1
        JE      @@2
        OR      AL,AH
        STOSB
        DEC     ECX
        JNE     @@1
@@2:    MOV     EAX,EDI
        SUB     EAX,EBX
        POP     EBX
        POP     EDI
        POP     ESI
end;
end;

Напиши на ассемблере пусь ахнут :D Шучу, сеичас напишу :-)

Аватара пользователя
AzazeL
otaku no rida
otaku no rida
 
Сообщения: 2024
Зарегистрирован: 26 янв 2006, 16:45
Последний визит: 12 июл 2009, 21:53
Благодарил (а): 2 раз.
Поблагодарили: 24 раз.
Пол: Муж.
Возраст: 38
    Неизвестно Неизвестно

Сообщение #5 AzazeL » 15 янв 2007, 19:08

Код: Выделить всё
// FAQ
// Q: что такое shl?
// A: побитовый сдвиг влево
//    A=00000010 в 2-ой системе
//    A shl 1 = 00000100
// Q: что такое and?
// A: побитовое И
//    A=00001101 в 2-ой системе
//    A and 00001010 = 00001000
function IntToBin(Value:Cardinal):string;
var
  i:integer;
  a:Cardinal;
  S:string;
begin
  a:=1;
  S:='';
  for i:=0 to 31 do
  begin
    if (Value and a)<>0 then
    begin
      S:='1'+S;
    end
    else
    begin
      S:='0'+S;
    end;
    a:=a shl 1;
  end;
  Result:=S;
end;

Аватара пользователя
AzazeL
otaku no rida
otaku no rida
 
Сообщения: 2024
Зарегистрирован: 26 янв 2006, 16:45
Последний визит: 12 июл 2009, 21:53
Благодарил (а): 2 раз.
Поблагодарили: 24 раз.
Пол: Муж.
Возраст: 38
    Неизвестно Неизвестно

Сообщение #6 zuzacabric » 15 янв 2007, 19:30

в дельфях как ни странно можно делать ассемблерные вставки. вот и напиши всю процедуру на асме - код же будет находиться в дельфи :wink:

zuzacabric
Ветренный демиург
 
Сообщения: 1354
Зарегистрирован: 29 сен 2006, 17:41
Последний визит: 31 авг 2010, 13:32
Благодарил (а): 0 раз.
Поблагодарили: 10 раз.
Пол: Оно
Возраст: 24
    Неизвестно Неизвестно

Сообщение #7 AzazeL » 15 янв 2007, 19:52

Код: Выделить всё
//FAQ
// Q:что такое or?
// A: побитовое ИЛИ
//     A=00000001 в 2-ой системе
//     A or 00010000 = 00010001

function BinToInt(Value:string):Cardinal;
var
   i:integer;
   V:Cardinal;
   A:Cardinal;
begin
  V:=0;
  if Length(Value)>32 then
  begin
    Value:=Copy(Value,1,32);
  end;
  for i:=1 to Length(Value) do
  begin
    if Value[i]='1' then
    begin
      A:=1 shl (Length(Value)-i);
      V:=V or A;
    end;
  end;
  Result:=V;
end;

Аватара пользователя
AzazeL
otaku no rida
otaku no rida
 
Сообщения: 2024
Зарегистрирован: 26 янв 2006, 16:45
Последний визит: 12 июл 2009, 21:53
Благодарил (а): 2 раз.
Поблагодарили: 24 раз.
Пол: Муж.
Возраст: 38
    Неизвестно Неизвестно

Сообщение #8 proxx » 15 янв 2007, 22:12

Спасибо всем, счас проверю :)

Аватара пользователя
proxx
Хитрый лис
 
Автор темы
Сообщения: 564
Зарегистрирован: 19 янв 2006, 16:17
Последний визит: 20 янв 2015, 16:32
Благодарил (а): 0 раз.
Поблагодарили: 5 раз.
Пол: Оно
Возраст: 24
    Неизвестно Неизвестно



Список форумов Хобби и интересы Hard & Soft

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

cron