Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 26.11.2018
Сообщений: 7

Преобразование массива байтов в файл

24.11.2019, 23:20. Показов 7898. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! У меня возникла проблема: мне нужно преобразовать массив байтов в файл (тоесть чтобы после преобразования был файл .exe или .txt). Вот суть моей работы:
1. Я открываю файл такой командой: if ((fp = fopen(fname, "r")) == NULL)
2. Потом командой bm = static_cast<byte*>(static_cast<void*>(&f p)) превращаю открытый файл в поток байтов
3. Потом мне необходимо сделать ксор
, после всех необходимых операций я получаю, допустим массив байтов bnt. Как мне преобразовать его назад к виду файла?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.11.2019, 23:20
Ответы с готовыми решениями:

Запись байтов в файл через поток
Записываю байты в файл через поток: static BYTE SignBuffer; ofstream os(&quot;Test.txt&quot;); os.write(SignBuffer, 64); os.close(); ...

Запись в файл отдельных байтов
Есть бмп файл-шаблон, в него нужно втиснуть график функции. Заменить определенные биты. Как? Масив с координатами точек есть. Помогите...

Преобразование 4-х байтов в int
Приветствую, в общем пытаюсь считать 4 байта с файла и собрать их в одно число типа int в переменную this-&gt;mtrk_chunk_length. Эти 4...

6
фрилансер
 Аватар для Алексей1153
6465 / 5679 / 1131
Регистрация: 11.10.2019
Сообщений: 15,122
25.11.2019, 09:18
Цитата Сообщение от AngelinaCe Посмотреть сообщение
2. Потом командой bm = static_cast<byte*>(static_cast<void*>(&f p)) превращаю открытый файл в поток байтов
лихо И что, работает? Не крашится?

читай из файла блоками, ксорь и пиши обратно по месту (возвращая курсор).
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
25.11.2019, 16:09
Цитата Сообщение от AngelinaCe Посмотреть сообщение
2. Потом командой bm = static_cast<byte*>(static_cast<void*>(&f p)) превращаю открытый файл в поток байтов
А зачем?
Цитата Сообщение от AngelinaCe Посмотреть сообщение
Как мне преобразовать его назад к виду файла?
Т.е. как записать это в файл обратно или что?
0
0 / 0 / 0
Регистрация: 26.11.2018
Сообщений: 7
25.11.2019, 19:40  [ТС]
Сначала я имею файл типа .exe потом шифрую его и в конце хочу получить тот же файл только зашифрованный, тоеть тот же экзешник

Добавлено через 2 минуты
Можно приблизительный пример?
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
26.11.2019, 13:37
Цитата Сообщение от AngelinaCe Посмотреть сообщение
Сначала я имею файл типа .exe потом шифрую его и в конце хочу получить тот же файл только зашифрованный, тоеть тот же экзешник
.exe - это исполняемый файл, т.е. Вы хотите сказать, что этот ваш файл это программа и Вы хотите его зашифровать? Пишите аналог упаковщика? Но тогда надо понимать, что после только простого шифрования исполняемый файл перестанет быть исполняемым.
Цитата Сообщение от AngelinaCe Посмотреть сообщение
Можно приблизительный пример?
Эм, ну, я думаю запись не отличается от записи .txt файлов.

Другой вопрос, что Вы здесь делаете?
Цитата Сообщение от AngelinaCe Посмотреть сообщение
Потом командой bm = static_cast<byte*>(static_cast<void*>(&f p)) превращаю открытый файл в поток байтов
Это не превращает файл в поток байтов, как Вы написали.
И скорее всего, то что Вы делаете с bm приводит к UB в вашем коде.
0
Just Do It!
 Аватар для XLAT
4211 / 2670 / 655
Регистрация: 23.09.2014
Сообщений: 9,083
Записей в блоге: 3
26.11.2019, 16:42
Лучший ответ Сообщение было отмечено AngelinaCe как решение

Решение

Цитата Сообщение от AngelinaCe Посмотреть сообщение
Преобразование массива байтов в файл
читайте комменты:
C++
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
#include <iostream>
#include <cstdio>
///----------------------------------------------------------------------------|
/// Старт.
///----------------------------------------------------------------------------:
int main()
{   FILE* fp;  //<-------------------------------------------------------|
    ///   fp - указатель на управляющую таблицу открытого потока данных, |
    ///        если открытие файла произошло успешно.                    |
    ///------------------------------------------------------------------!
    
    ///              test.txt - текстовый файл есть на диске.
    if ((fp = fopen("test.txt", "r")) == NULL)
    {   std::cout << "ERROR!\n";
        std::cin.get();
        return 0;
    }
    
    ///------------------------------------------------------------------------|
    /// ПРОВЕРКА ВАШЕЙ ТЕОРИИ!                                                 |
    ///------------------------------------------------------------------------:
    char* bm  = static_cast<char*>(static_cast<void*>(fp));
    FILE* fp2 = static_cast<FILE*>(static_cast<void*>(bm));
    
    std::cout << "fp  = " << fp  << "\n";
    std::cout << "fp2 = " << fp2 << "\n\n";
    
    ///----------------------------------|
    /// Это не имеет смысла!!!           |
    ///----------------------------------:
    std::cout << "bm  = " << bm  << "\n"; ///<<<--- Ахтунг!
    fclose    (fp);
    ///----------------------------------|
    /// Теория была провалена!           |
    //           теперь к делу ...       |
    ///----------------------------------:
    
    ///------------------------------------------------------------------------|
    /// Работаем с бинарником.                                                 |
    ///------------------------------------------------------------------------:
    /// Открываем двоичный файл для чтения и записи:
    if ((fp = fopen("test.txt", "r+b")) == NULL)
    {   std::cout << "ERROR!\n";
        std::cin.get();
        return 0;
    }
    
    ///----------------------------------|
    /// Определяем размер файла.         |
    ///----------------------------------:
    fseek(fp, 0, SEEK_END);
    long size = ftell(fp);
    fseek(fp, 0, SEEK_SET);
    
    ///----------------------------------|
    /// Буфер в памяти под данные.       |
    ///----------------------------------:
    char* buf = (char*)malloc(size+1); 
    
    ///----------------------------------|
    /// Я буду интерпретировать          |
    /// даные бинарника, как текст.      |
    ///----------------------------------:
    buf[size] = 0; // Терменирую конец строки.
    
    ///----------------------------------|
    /// Читаю данные из файла в буфер.   |
    ///----------------------------------:
    fread (buf, sizeof(char), size, fp);
    std::cout << buf << "\n";
    
    ///----------------------------------|
    /// Модификация данных.              |
    ///----------------------------------:
    buf[0] = 'X';
    
    ///----------------------------------|
    /// Запись данных из буфера в файл.  |
    ///----------------------------------:
    fseek (fp, 0, SEEK_SET);
    fwrite(buf, sizeof(char), size, fp);
    
    
    fclose    (fp);
    free     (buf);
    
    std::cin.get();
    return 0;
}
1
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,282
26.11.2019, 17:10
Лучший ответ Сообщение было отмечено AngelinaCe как решение

Решение

Цитата Сообщение от AngelinaCe Посмотреть сообщение
Как мне преобразовать его назад к виду файла
Да очень просто. Читать файл по одному байту, делать с ним что хошь (шифрование?), и потом так же по одному байту записывать в другой файл. Винда (по крайней мере, за других не ручаюсь) сама сделает буферизацию, и чтение/запись будет осуществляться с нормальной скоростью.

ps... приходится обучать начинающих хакеров!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.11.2019, 17:10
Помогаю со студенческими работами здесь

Чтение массива из файла, его преобразование и запись в другой файл
Всем привет. Есть вот такой код: #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;fstream&gt; #include &lt;string&gt; ...

Записать звука в файл из потока байтов
допустим ко мне на сервер TCP пришел массив байт звука и я хочу этот поток байтов записать в звуковой файл. Как я могу это сделать на Qt...

Создать файл состоящий из нулевых байтов
Сабж. Это как? Кодировка походу ASCII. У меня два варианта... 1) По ascii таблице ищем то, где и первый и второй бит...

Преобразование массива байтов в пользовательский тип
Ну суть вопроса состоит в названии... Нужно массив байтов преобразовать в пользовательский тип. И еще надо преобразование в delegate. ...

Преобразование из массива байтов в стринг на VBS
Есть кусок кода, переделаного с ASP: Dim objXMLHTTP strConn = &quot;PROVIDER=MSDASQL;DRIVER=SQL Server;Server=q;Database=w;User...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru