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

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

24.11.2019, 23:20. Показов 7797. Ответов 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
6445 / 5640 / 1128
Регистрация: 11.10.2019
Сообщений: 15,007
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
4201 / 2656 / 654
Регистрация: 23.09.2014
Сообщений: 8,949
Записей в блоге: 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,267
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
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru