Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
Толян ©   (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]

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



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

Форум: "Потрепаться";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.028 c
1-1133199265
Erick
2005-11-28 20:34
2005.12.25
Работа с ListBox из другой формы


10-1110209021
maxz
2005-03-07 18:23
2005.12.25
сопряжение в AutoCAD


14-1133638993
Piter
2005-12-03 22:43
2005.12.25
Российские комманды в европейских кубках


2-1134053886
coral
2005-12-08 17:58
2005.12.25
StringGrid


3-1131432001
antoxa2005
2005-11-08 09:40
2005.12.25
Проблема! Если на обном компьютере запись дата сета наход. в реда





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