Форум: "Потрепаться";
Текущий архив: 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.54 MB
Время: 0.011 c