76 / 62 / 23
Регистрация: 11.07.2009
Сообщений: 730
1

бинарный код файла

16.08.2011, 12:34. Показов 6813. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Такая задача - как получить бинарный код любого файла и обратно его собрать? поискал по теме, на других форумах нашёл информацию что можно через стандартную процедуру чтения файла это сделать и мемо, только вот загружается в мемо не то что надо, на ответах маил.ру сказали что в дельфи вообще невозможно это сделать, только ассемблером. Подскажите как решить?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.08.2011, 12:34
Ответы с готовыми решениями:

Перевод .bmp в бинарный код
Доброго всем времени. Если кратко - с одногруппником делаем растровый лазерный проектор,...

Код БАТ файла в Код Делфи
@echo off setlocal ENABLEDELAYEDEXPANSION ::Set Wpath="%AppData%\.minecraft\" Set Wpath=".\" ...

Перевод любого файла в бинарный код
Можно ли перевести любой файл в бинарный код? Если да, то можно программу или пример кода?

Работа с файлами. Вывести бинарный код файла на экран в Visual C++
Доброе время суток форумчане. Нужна ваша помощь. Сразу подмечу что для кого-то ответ может...

1
13101 / 5882 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
17.08.2011, 01:46 2
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Rayne Посмотреть сообщение
на ответах маил.ру сказали что в дельфи вообще невозможно это сделать, только ассемблером.
Это ошибочное мнение.
---
Любые данные из файла можно загрузить в какой-либо контейнер - в массив или в строку, например.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//Загрузка данных из файла в динамический массив.
procedure TForm1.Button1Click(Sender: TObject);
const
  Fn = 'file.dat';
var
  F : File;
  Buff : array of Byte;
  Size : Integer;
  FileName : String;
begin
  FileName := ExtractFilePath(ParamStr(0)) + Fn;
  AssignFile(F, FileName);
  //Открываем файл в режиме минимального блока в 1 байт.
  Reset(F, 1);
  //Размер файла измеряется в количестве минимальных блоков.
  //Выше мы открыли файл в режиме минимального блока в 1 байт.
  //Поэтому, в данном случае, FileSize(F) вернёт размер файла в байтах.
  Size := FileSize(F);
  //Устанавливаем размер буфера равным размеру файла.
  SetLength(Buff, Size);
  //Читаем всё содержимое файла в массив.
  BlockRead(F, Pointer(Buff)^, Size);
  //Закрываем файл.
  CloseFile(F);
 
  //Теперь всё содержимое файла записано в массив Buff.
  //...
  //...
  //...
end;
 
//Загрузка данных из файла в строку типа AnsiString.
procedure TForm1.Button2Click(Sender: TObject);
const
  Fn = 'file.dat';
var
  F : File;
  Buff : String; //AnsiString;
  Size : Integer;
  FileName : String;
begin
  FileName := ExtractFilePath(ParamStr(0)) + Fn;
  AssignFile(F, FileName);
  //Открываем файл в режиме минимального блока в 1 байт.
  Reset(F, 1);
  //Размер файла измеряется в количестве минимальных блоков.
  //Выше мы открыли файл в режиме минимального блока в 1 байт.
  //Поэтому, в данном случае, FileSize(F) вернёт размер файла в байтах.
  Size := FileSize(F);
  //Устанавливаем размер строки равным размеру файла.
  SetLength(Buff, Size);
  //Читаем всё содержимое файла в строку.
  BlockRead(F, Pointer(Buff)^, Size);
  //Закрываем файл.
  CloseFile(F);
 
  //Теперь всё содержимое файла записано в строку Buff.
  //...
  //...
  //...
end;
То что данные загружаются в строку типа AnsiString - это не должно смущать. В такую строку можно загрузить любые данные - в том числе изображения, звук, видео и прочее - что угодно.
---
Цитата Сообщение от Rayne Посмотреть сообщение
на других форумах нашёл информацию что можно через стандартную процедуру чтения файла это сделать и мемо
TMemo не предназначен для показа бинарных данных. Чтобы такие данные показать в TMemo, их надо предварительно представить в виде текста. Можно например поступить так: каждому байту исходных данных сопоставить строку вида: XX, где X - шестнадцатиричная цифра. Элементы XX отделять друг от друга знаками табуляциии. В каждой строке располагать не более 16 элементов - т. е. разбить массив кодов на группы по 16 элементов в каждой.
Реализовать это можно так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//Представляет бинарные данные в виде форматированного текста,
//содержащего группы шестнадцатиричных кодов.
function BinToHexText(const aArr : array of Byte) : String; overload;
var
  i, j, Len : Integer;
begin
  //Всего элементов (байт) в массиве.
  Len := Length(aArr);
 
  //Вычисляем длину результирующей строки.
 
  //Каждый байт исходного массива будет представлен тремя символами:
  //две шестнадцатиричные цифры и знак табуляции, в качестве
  //отступа между элементами. Поэтому: Len * 3.
  //Так как, после последнего элемента отступ делать не надо,
  //следовательно: Len * 3 - 1.
  //После каждой группы, содержащей по 16 элементов, записываем перевод
  //строки - это пара знаков: #13#10. Поэтому, после каждой группы из
  //16 элементов добавляется ещё по одному знаку. Добавляется по одному
  //знаку, а не по два, потому что один знак мы уже учли ранее на
  //правах табуляции. При этом, если последняя группа окажется
  //состоящей из 16 элементов, то добавлять перевод строки не надо.
  //Поэтому: (Len - 1) div 16
  Len := Len * 3 - 1 + (Len - 1) div 16;
 
  //Устанавливаем длину результирующей строки.
  SetLength(Result, Len);
 
  //Записываем в рузультирующую строку данные.
  j := 1;
  Len := High(aArr);
  for i := 0 to Len do begin
    if i  > 0 then begin
      if i mod 16 = 0 then begin
        Result[j] := #13;
        Inc(j);
        Result[j] := #10;
        Inc(j);
      end else begin
        Result[j] := #9;
        Inc(j);
      end;
    end;
    Result[j] := IntToHex(aArr[i] shr 4, 1)[1];
    Inc(j);
    Result[j] := IntToHex(aArr[i] and $F, 1)[1];
    Inc(j);
  end;
end;
 
//Представляет бинарные данные в виде форматированного текста,
//содержащего группы шестнадцатиричных кодов.
function BinToHexText(const aStr : String) : String; overload;
var
  i, j, Len : Integer;
begin
  //Всего элементов (байт) в массиве.
  Len := Length(aStr);
  //Вычисляем длину результирующей строки.
  Len := Len * 3 - 1 + (Len - 1) div 16;
  //Устанавливаем длину результирующей строки.
  SetLength(Result, Len);
 
  //Записываем в рузультирующую строку данные.
  j := 1;
  Len := Length(aStr);
  for i := 1 to Len do begin
    if i  > 1 then begin
      if (i - 1) mod 16 = 0 then begin
        Result[j] := #13;
        Inc(j);
        Result[j] := #10;
        Inc(j);
      end else begin
        Result[j] := #9;
        Inc(j);
      end;
    end;
    Result[j] := IntToHex(Byte(aStr[i]) shr 4, 1)[1];
    Inc(j);
    Result[j] := IntToHex(Byte(aStr[i]) and $F, 1)[1];
    Inc(j);
  end;
end;
 
//Загрузка данных из файла в динамический массив.
procedure TForm1.Button1Click(Sender: TObject);
const
  Fn = 'file.dat';
var
  F : File;
  Buff : array of Byte;
  Size : Integer;
  FileName : String;
begin
  FileName := ExtractFilePath(ParamStr(0)) + Fn;
  AssignFile(F, FileName);
  //Открываем файл в режиме минимального блока в 1 байт.
  Reset(F, 1);
  //Размер файла измеряется в количестве минимальных блоков.
  //Выше мы открыли файл в режиме минимального блока в 1 байт.
  //Поэтому, в данном случае, FileSize(F) вернёт размер файла в байтах.
  Size := FileSize(F);
  //Устанавливаем размер буфера равным размеру файла.
  SetLength(Buff, Size);
  //Читаем всё содержимое файла в массив.
  BlockRead(F, Pointer(Buff)^, Size);
  //Закрываем файл.
  CloseFile(F);
 
  //Теперь всё содержимое файла записано в массив Buff.
  //...
  //...
  //...
 
  Memo1.Text := BinToHexText(Buff);
end;
 
//Загрузка данных из файла в строку типа AnsiString.
procedure TForm1.Button2Click(Sender: TObject);
const
  Fn = 'file.dat';
var
  F : File;
  Buff : String; //AnsiString;
  Size : Integer;
  FileName : String;
begin
  FileName := ExtractFilePath(ParamStr(0)) + Fn;
  AssignFile(F, FileName);
  //Открываем файл в режиме минимального блока в 1 байт.
  Reset(F, 1);
  //Размер файла измеряется в количестве минимальных блоков.
  //Выше мы открыли файл в режиме минимального блока в 1 байт.
  //Поэтому, в данном случае, FileSize(F) вернёт размер файла в байтах.
  Size := FileSize(F);
  //Устанавливаем размер строки равным размеру файла.
  SetLength(Buff, Size);
  //Читаем всё содержимое файла в строку.
  BlockRead(F, Pointer(Buff)^, Size);
  //Закрываем файл.
  CloseFile(F);
 
  //Теперь всё содержимое файла записано в строку Buff.
  //...
  //...
  //...
 
  Memo1.Text := BinToHexText(Buff);
end;
3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.08.2011, 01:46
Помогаю со студенческими работами здесь

Бинарный код
Кто-нибудь подскажет, как перевести любую букву в двоичный код(бинарный код)? Уже сколько форумов...

Перевод в бинарный код
какие методы используются для перевода значений(любых) в бинарный код?

бинарный код преобразование
дело было так поступил я на заочку на программного инженера и нам преподаватель но "основам...

Бинарный код изображения
Подскажите, как считать изображение побайтово, чтобы его бинарный код записался в memo?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru