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

Вниз

Система счесления   Найти похожие ветки 

 
Толян ©   (2005-11-28 16:40) [0]

Как мне загрузить любой файл в Memo в двоичной системе счисления?
Заранее спасибо


 
Ega23 ©   (2005-11-28 16:44) [1]

Написать функцию перевода числа в строку в двоичном виде. И эту строку выводить на экран.


 
PeaK ©   (2005-11-28 16:54) [2]

Для каждого считанного байта, например, восемь раз сделать в цикле сравнение вида
if (b and 128) then
 memo1.text := memo1.text + "1"
else
 memo1.text := memo1.text + "0" ;
а потом сдвиг побитовый влево
 b := b shl 1 ;
Есть варианты заполнения кеша и значительного ускорения алгоритма, но и такого варианта должно хватить


 
Толян ©   (2005-11-29 13:55) [3]

а поподробней можно? :)


 
Ega23 ©   (2005-11-29 13:58) [4]


> а поподробней можно? :)


Куда уж подробней-то...


 
evvcom ©   (2005-11-29 14:01) [5]

Подробней только полный текст модуля и формы. Да и то, тогда вопросы будут типа "а как текст формы применить к проекту?"


 
Толян ©   (2005-11-29 14:03) [6]

а че такое  b и 128


 
Толян ©   (2005-11-29 14:05) [7]

и еще файл не обязательно с чичлами он может быть и текстовой


 
Ega23 ©   (2005-11-29 14:07) [8]

А что есть текст? Текст есть набор байтов.


 
evvcom ©   (2005-11-29 14:09) [9]


> а че такое  b и 128

b - это байт из файла, а 128 - это число такое, умещающееся в байт и старший бит которого равен 1, а остальные нули. А что такое "and" делает вопроса не возникает?

> не обязательно с чичлами он может быть и текстовой

А это по барабану. В двоичном виде все файлы одинаковы, там нет ни чисел, ни текста, там есть только коды. :o)


 
Толян ©   (2005-11-29 14:16) [10]

блин дайте полный код проги пожалучта


 
begin...end ©   (2005-11-29 14:18) [11]

> Толян ©   (29.11.05 14:16) [10]

А пиво будет?


 
Толян ©   (2005-11-29 14:19) [12]

будет :) тока я далеко


 
PeaK ©   (2005-11-29 14:19) [13]

Функция берет байт, возвращает строку из нулей и единичек

function ByteToString(b : byte) : string ;
var
 i : byte ;
begin
 Result := "" ;
 for i := 0 to 7 do
 begin
   if (b and 128) > 0 then
     Result := Result + "1"
   else
     Result := Result + "0" ;
   b := b shl 1 ;
 end ;
end ;

Если что-то интересует еще, например скорасть - есть более быстрый способ.


 
Ega23 ©   (2005-11-29 14:20) [14]


> блин дайте полный код проги пожалучта


Халявщиков - в газенваген!


 
Толян ©   (2005-11-29 14:24) [15]

b : byte -а где его брать??? :)
просто я ешо не доганяю
кароче я начинающий


 
Tonich ©   (2005-11-29 14:27) [16]

наверное тебе уже пора заканчивать

P.S. как ты вообще сразу не кинулся чужие процессы громить )))))


 
Virgo_Style ©   (2005-11-29 14:28) [17]

Толян ©   (29.11.05 14:24) [15]
кароче я начинающий


Неправда, до начинающего еще как до Китая брассом


 
Толян ©   (2005-11-29 14:28) [18]

неа это я умею
вот просто столкнулся с такой бедой а делать не умею :(


 
Tonich ©   (2005-11-29 14:32) [19]

тохда вот это

> неа это я умею

как-то не сочетается с этим  

> b : byte -а где его брать??? :)


> а че такое  b и 128


 
PeaK ©   (2005-11-29 14:33) [20]

Строка
if (b and 128) > 0 then
По порядку - (b and 128) - происходит опрация побитовое И, пусть b представим в общем виде ХХХХ ХХХХ, где Х - бит, который может быть 1 или 0. Битовая последовательность 128 - 1000 0000. Тогда
ХХХХ ХХХХ
логическое И
1000 0000
будут равны
Х000 0000
Таким образом, сравнивая результат с нулем, можем определить ноль в старшем разряде или единица.
b := b shl 1 ;
Побитовый сдвиг всего содержимого влево на одну позицию - если b=0011 1100, то после каждого шага будет содержимое меняться так:
0011 1100 - изначально
0111 1000
1111 0000
1110 0000
1100 0000 и так далее, на новые позиции ставится автоматом ноль. В ассемблере есть подобные операции, но там их больше и они отличаются...


 
Толян ©   (2005-11-29 14:34) [21]

дайте пожалуста полный код проги!


 
begin...end ©   (2005-11-29 14:45) [22]

> Толян ©   (29.11.05 14:19) [12]
> будет

Писал прямо здесь, поэтому не очень оптимально получилось, да и ошибиться мог. Но если работает, то высылайте Балтику N, где N принадлежит [5; 9]. Не вышлете -- пеняйте на себя. Я серьёзно.

function ByteToBin(Value: Byte): string;
var
 I: Integer;
begin
 SetLength(Result, 8);
 for I := 8 downto 1 do
 begin
   if Odd(Value) then
     Result[I] := "1"
   else
     Result[I] := "0";
   Value := Value shr 1
 end
end;

procedure LoadFileToMemo(const FileName: string; Memo: TMemo);
var
 I: Integer;
 S: string;
begin
 with TMemoryStream.Create do
   try
     LoadFromFile(FileName);
     SetLength(S, 8 * Size);
     for I := 0 to Pred(Size) do
       Move(ByteToBin(PByte(Cardinal(Memory) + I)^)[1], S[I * 8 + 1], 8);
     Memo.Lines.Text := S
   finally
     Free
   end
end;

begin
 LoadFileToMemo("C:\MyFile.txt", Memo1)
end.


P.S. Способ подходит для небольших файлов.


 
PeaK ©   (2005-11-29 14:47) [23]

Целиком процедура с форматированным выводом по четыре байта с разделителями... :-)

procedure TForm1.Button1Click(Sender: TObject);
var
 f : file of byte ;
 OurByte : byte ;
 k : byte ;

begin
 Memo1.Clear ;
 AssignFile( f, "c:\config.sys") ;
 Reset(f) ;
 k := 0 ;
 while not Eof(f) do
 begin
   Read(f, OurByte) ;
   Memo1.Text := Memo1.Text + ByteToString(OurByte) ;
   inc(k) ;
   if k = 4 then
   begin
     k := 0 ;
     Memo1.Text := Memo1.Text + #13 + #10 ;
   end
   else
     Memo1.Text := Memo1.Text + " ||| " ;
 end ;
 CloseFile(f) ;
end;


 
Толян ©   (2005-11-29 14:49) [24]

а как большие файлы???


 
Ega23 ©   (2005-11-29 14:51) [25]


> а как большие файлы???


А где пиво новочеркасскому коллеге?


 
evvcom ©   (2005-11-29 14:52) [26]


> Толян ©

Ну выкладывай теперь пиво для begin...end !!!

> begin...end ©   (29.11.05 14:45) [22]

Не будет работать, волшебного слова "unit" нет и многих других. :-)))))


 
begin...end ©   (2005-11-29 14:53) [27]

> Толян ©   (29.11.05 14:49) [24]

Небольшие/большие -- понятие растяжимое. В [22] файл целиком читается в память. Но если можно себе позволить хранить в памяти текст двоичного представления (а он будет занимать в 8 раз больше, чем сам файл), то и сам файл, вероятно, тоже можно позволить целиком загружать в память.

P.S. Пива пока не получил. Жду.


 
Толян ©   (2005-11-29 14:57) [28]

о
 | |
/   \
|пи |
|во |
-----


 
PeaK ©   (2005-11-29 15:00) [29]

Чем не нравится моя процедура? ;-)


 
begin...end ©   (2005-11-29 15:04) [30]

> Толян ©   (29.11.05 14:57) [28]

Всё с тобой, Толян, ясно.
Я предупреждал.


 
Толян ©   (2005-11-29 15:11) [31]

begin...end © все работает тока при больших файл зависате


 
Толян ©   (2005-11-29 15:12) [32]

begin...end © а как я тебе пиво то передам??? :)


 
evvcom ©   (2005-11-29 15:16) [33]


> а как я тебе пиво то передам???

А че в Новочеркасск поезда не ходят?


 
Ega23 ©   (2005-11-29 15:32) [34]


> а как я тебе пиво то передам??? :)


А нефиг тогда в [12] было обещать.
За свои слова отвечать надо.


 
LionMen ©   (2005-11-29 15:48) [35]

ByteToString - такой преобразователь в Делфи нет!!! Подскажите где найти


 
Ega23 ©   (2005-11-29 15:50) [36]


> ByteToString - такой преобразователь в Делфи нет!!! Подскажите
> где найти


Толян, смена ника - не поможет.


 
Tonich ©   (2005-11-29 15:52) [37]


> LionMen ©   (29.11.05 15:48) [35]

))))))))))))))))))))


 
Толян ©   (2005-11-29 15:54) [38]

блин это же прикол! :))))


 
Иксик ©   (2005-11-29 17:02) [39]


> Толян ©   (28.11.05 16:40)  

Меняй профессию! Составь конкуренцию таджикам!


 
evvcom ©   (2005-11-29 17:15) [40]

Толян, ты смотри, счетчик тикает. С пивом не тяни. А то ящик должен будешь! :)))
Ты бы хоть свои координаты в анкете обозначил.


 
Igorek ©   (2005-11-29 17:31) [41]

Не слушай их. Вот:
function ByteToBin_Super(B: Byte): string;
const btb: array[0..255] of string =
(
"00000000","00000001","00000010","00000011","00000100","00000101","00000110","00000111",
"00001000","00001001","00001010","00001011","00001100","00001101","00001110","00001111",
"00010000","00010001","00010010","00010011","00010100","00010101","00010110","00010111",
"00011000","00011001","00011010","00011011","00011100","00011101","00011110","00011111",
"00100000","00100001","00100010","00100011","00100100","00100101","00100110","00100111",
"00101000","00101001","00101010","00101011","00101100","00101101","00101110","00101111",
"00110000","00110001","00110010","00110011","00110100","00110101","00110110","00110111",
"00111000","00111001","00111010","00111011","00111100","00111101","00111110","00111111",
"01000000","01000001","01000010","01000011","01000100","01000101","01000110","01000111",
"01001000","01001001","01001010","01001011","01001100","01001101","01001110","01001111",
"01010000","01010001","01010010","01010011","01010100","01010101","01010110","01010111",
"01011000","01011001","01011010","01011011","01011100","01011101","01011110","01011111",
"01100000","01100001","01100010","01100011","01100100","01100101","01100110","01100111",
"01101000","01101001","01101010","01101011","01101100","01101101","01101110","01101111",
"01110000","01110001","01110010","01110011","01110100","01110101","01110110","01110111",
"01111000","01111001","01111010","01111011","01111100","01111101","01111110","01111111",
"10000000","10000001","10000010","10000011","10000100","10000101","10000110","10000111",
"10001000","10001001","10001010","10001011","10001100","10001101","10001110","10001111",
"10010000","10010001","10010010","10010011","10010100","10010101","10010110","10010111",
"10011000","10011001","10011010","10011011","10011100","10011101","10011110","10011111",
"10100000","10100001","10100010","10100011","10100100","10100101","10100110","10100111",
"10101000","10101001","10101010","10101011","10101100","10101101","10101110","10101111",
"10110000","10110001","10110010","10110011","10110100","10110101","10110110","10110111",
"10111000","10111001","10111010","10111011","10111100","10111101","10111110","10111111",
"11000000","11000001","11000010","11000011","11000100","11000101","11000110","11000111",
"11001000","11001001","11001010","11001011","11001100","11001101","11001110","11001111",
"11010000","11010001","11010010","11010011","11010100","11010101","11010110","11010111",
"11011000","11011001","11011010","11011011","11011100","11011101","11011110","11011111",
"11100000","11100001","11100010","11100011","11100100","11100101","11100110","11100111",
"11101000","11101001","11101010","11101011","11101100","11101101","11101110","11101111",
"11110000","11110001","11110010","11110011","11110100","11110101","11110110","11110111",
"11111000","11111001","11111010","11111011","11111100","11111101","11111110","11111111"
);
begin
Result := btb[B];
end;


 
Zeqfreed ©   (2005-11-29 19:21) [42]

Igorek ©   (29.11.05 17:31) [41]
У меня красивее :)

function ByteToBin_Super_LMDEdition(const B: Byte) : String;
const
 btb: array[0..255] of string =
 (
  "00000000","00000000","00000000","00000000","00000000","00000000","00000000","00000000",
  "00010100","00000000","00000000","00000000","00000000","00001111","11110000","00000000",
  "00111110","00000000","00000000","00000000","00000000","00011111","11111000","00000000",
  "00111110","00000000","00000000","00000000","00000000","00111111","11111100","00000000",
  "00111110","00000000","00000000","00000000","00000000","00111100","00011110","00000000",
  "00111110","00000000","00000000","00000000","00000000","00111100","00001111","00000000",
  "00111110","00000000","00000000","00000000","00000000","00111100","00000111","10000000",
  "00111110","00000000","00000000","00000000","00000000","00111100","00000011","11000000",
  "00111110","00000000","00000000","00000000","00000000","00111100","00000001","11100000",
  "00111110","00000000","00000100","00000000","11000000","00111100","00000001","11100000",
  "00111110","00000000","00011110","00000001","11110000","00111100","00000001","11110000",
  "00111110","00000000","00111111","00000001","11111000","00111100","00000000","11110000",
  "00111110","00000000","00111111","10000011","11111100","00111100","00000000","11110000",
  "00111110","00000000","00111111","10000011","11111100","00111100","00000000","11110000",
  "00111110","00000000","00111111","11000111","11111100","00111100","00000001","11100000",
  "00111111","11111000","00111111","11101111","11111100","00111100","00000011","11000000",
  "00111111","11111100","00111111","11111110","11111100","00111100","00000111","10000000",
  "00011111","11111000","00111110","11111110","11111100","00111100","00001111","00000000",
  "00000000","00000000","00111110","01111100","11111100","00111111","11111110","00000000",
  "00000000","00000000","00111110","00111000","11111100","00111111","11111100","00000000",
  "00000000","00000000","00111110","00010000","11111100","00011111","11111000","00000000",
  "00000000","00000000","00111110","00000000","11111100","00000000","00000000","00000000",
  "00000000","00000000","00111110","00000000","11111100","00000000","00000000","00000000",
  "00000000","00000000","00111110","00000000","11111100","00000000","00000000","00000000",
  "00000000","00000000","00111110","00000000","11111100","00000000","00000000","00000000",
  "00000000","00000000","00111110","00000000","11111100","00000000","00000000","00000000",
  "00000000","00000000","00111110","00000000","11111100","00000000","00000000","00000000",
  "00000000","00000000","00111110","00000000","11111100","00000000","00000000","00000000",
  "00000000","00000000","00111110","00000000","01111100","00000000","00000000","00000000",
  "00000000","00000000","00010100","00000000","00001000","00000000","00000000","00000000",
  "00000000","00000000","00000000","00000000","00000000","00000000","00000000","00000000",
  "00000000","00000000","00000000","00000000","00000000","00000000","00000000","00000000"
 );
begin
 Result := btb[B];
end;


 
Igorek ©   (2005-11-30 09:11) [43]


> Zeqfreed ©   (29.11.05 19:21) [42]

Мне интересно - как ты получил этот код?


 
Ega23 ©   (2005-11-30 09:19) [44]


> Мне интересно - как ты получил этот код?


Посмотри на картинку издалека.


 
Иксик ©   (2005-11-30 09:54) [45]


> Посмотри на картинку издалека.

Потому и интересно :))


 
jack128 ©   (2005-11-30 10:08) [46]

Так есть специальные программки, которые псевдографику рисуют..


 
Igorek ©   (2005-11-30 10:43) [47]


> jack128 ©   (30.11.05 10:08) [46]

Так неинтересно. Представь - в вашей конторе нельзя юзать левый софт. Под руками только Делфи и Паинт.


 
Иксик ©   (2005-11-30 11:04) [48]


> jack128 ©   (30.11.05 10:08) [46]

Я как то видел одну, но она спец. символами рисовала, а ноликами и единицами, это оригинально :)


 
Antonn ©   (2005-11-30 12:52) [49]

Igorek ©   (30.11.05 10:43) [47]
Под руками только Делфи и Паинт.

ну и в чем проблема? :)


 
Igorek ©   (2005-11-30 12:59) [50]


> Antonn ©   (30.11.05 12:52) [49]

Как обычно - в прокладке! :)


 
jack128 ©   (2005-11-30 13:04) [51]

Иксик ©   (30.11.05 11:04) [48]
а ноликами и единицами, это оригинально :)

И при этом гараздо проще ;)

Igorek ©   (30.11.05 10:43) [47]
Под руками только Делфи и Паинт.


На два байта переслать. Рисуешь буквы черным цветом на картинке размером 64*32, загружаешь дельфи, там где в картинке встечается черный цвет - ставишь "1", иначе "0"


 
Anatoly Podgoretsky ©   (2005-11-30 13:11) [52]

Нечетные нули - зеленым, четные единицы - красным.


 
Igorek ©   (2005-11-30 13:14) [53]

> jack128 ©   (30.11.05 13:04) [51]
> На два байта переслать. Рисуешь буквы черным цветом на картинке
> размером 64*32, загружаешь дельфи, там где в картинке встечается
> черный цвет - ставишь "1", иначе "0"

Можно, но я думал о консольной программе, только с возможностями ввода/вывода.


 
Zeqfreed ©   (2005-11-30 13:33) [54]

Igorek ©   (30.11.05 9:11) [43]

jack128 ©   (30.11.05 13:04) [51] Все правильно сказал :)
Код для получения полностью готового исходника ф-ции из картинки я, к сожалению, не сохранил :)

Igorek ©   (30.11.05 13:14) [53]
А в чем отличие? Что ты имеешь в виду?


 
Igorek ©   (2005-11-30 14:02) [55]

> Zeqfreed ©   (30.11.05 13:33) [54]
> Igorek ©   (30.11.05 13:14) [53]
> А в чем отличие? Что ты имеешь в виду?

Из библиотек использовать только ввод/вывод.


 
jack128 ©   (2005-11-30 14:26) [56]

Igorek ©   (30.11.05 14:02) [55]
Из библиотек использовать только ввод/вывод.

Ну я не думаю, что вычленить из Graphics.pas весь код по работе bmp - это супер сложная задача ;)


 
Толян ©   (2005-11-30 16:17) [57]

я не менял ник



Страницы: 1 2 вся ветка

Текущий архив: 2005.12.25;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.054 c
2-1134256939
Antony17
2005-12-11 02:22
2005.12.25
Запуск стандартных процедур


1-1132744195
GuAV
2005-11-23 14:09
2005.12.25
Рассылка событий группе объектов.


1-1133331594
leonidus
2005-11-30 09:19
2005.12.25
Помогите пожалуйста перевести код с Си на Delphi


14-1133622497
Piter
2005-12-03 18:08
2005.12.25
Ну блин, долбанный дос, долбанные программисты


14-1133370769
Sun bittern
2005-11-30 20:12
2005.12.25
Поиск файлов "Win+F" <> "FindFirst" <> "FindFirstFile"