Текущий архив: 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