Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Alex_LogON
0 / 0 / 0
Регистрация: 01.05.2015
Сообщений: 7
1

Инвертировать байты в файле

13.09.2017, 22:09. Просмотров 895. Ответов 4

В общем задачка. Есть файл, нужно открыть нужный байт в нём, и инвертировать значения битов в этом байте. То есть, допустим на позиции 4B в файле есть байт 3A (0011 1010) и из него нужно сделать C5 (1100 0101). В программу требуется ввести порядковый номер байта (не важно в DEC или в HEX), запросить подтверждение на изменение, инвертировать биты в нём, и записать всё это обратно в файл. Язык вроде знаю на троечку, но с файлами не работал. Спасибо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2017, 22:09
Ответы с готовыми решениями:

инвертировать
инвертировать 3-ий и 5-ый бит в слове. как это сделать? какие команды...

Инвертировать строку
Разбираюсь со строками. Почему на выводе получается "sace"?(должно быть "aces",...

Инвертировать массив
Доброе время суток! Начал делать задачу, но сказал преподаватель, что не все...

Инвертировать стэк
Тектс взял товарища с этого форума копирайты ему и респект вот этот чувак ...

Инвертировать таблицу с++
Здравствуйте, прошу помочь в написании программы инвертирования таблицы...

4
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,045
14.09.2017, 02:04 2
Лучший ответ Сообщение было отмечено Alex_LogON как решение

Решение

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
    ofstream fout("file.dat", ios::binary);
    unsigned char byte = 0;
    unsigned int pos = 0x4B;
    for (size_t i = 0; i < 100; ++i, ++byte)
    {
        if (i != pos)
            fout.write((const char*)&byte, sizeof(byte));
        else
        {
            unsigned char temp = 0x3A;
            fout.write((const char*)&temp, sizeof(temp));
        }
    }
    fout.close();
    
    fstream f("file.dat", ios::in | ios::out | ios::binary);
    if (!f)
    {
        cout << "Error opening file!" << endl;
        system("pause");
        return 0;
    }
    
    f.seekg(pos);
    f.read((char*)&byte, sizeof(byte));
    cout << hex << (int)byte << endl;
    
    byte = (~byte);
    f.seekp(pos);
    f.write((const char*)&byte, sizeof(byte));
    f.flush();
    
    f.seekg(pos);
    f.read((char*)&byte, sizeof(byte));
    cout << hex << (int)byte << endl;
    f.close();
0
Alex_LogON
0 / 0 / 0
Регистрация: 01.05.2015
Сообщений: 7
14.09.2017, 16:40  [ТС] 3
nd2, В общем, привёл код к такому виду:
C++ (Qt)
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
#include <QCoreApplication>
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ofstream fout("123.dat", ios::binary);
unsigned char byte = 0;
unsigned int pos = 0x1;
for (size_t i = 0; i < 100; ++i, ++byte)
{
    if (i != pos)
        fout.write((const char*)&byte, sizeof(byte));
    else
    {
        unsigned char temp = 0x3A;
        fout.write((const char*)&temp, sizeof(temp));
    }
}
fout.close();
 
fstream f("123.dat", ios::in | ios::out | ios::binary);
if (!f)
{
    cout << "Error opening file!" << endl;
    system("pause");
    return 0;
}
 
f.seekg(pos);
f.read((char*)&byte, sizeof(byte));
cout << hex << (int)byte << endl;
 
byte = (~byte);
f.seekp(pos);
f.write((const char*)&byte, sizeof(byte));
f.flush();
 
f.seekg(pos);
f.read((char*)&byte, sizeof(byte));
cout << hex << (int)byte << endl;
f.close();
}
По итогу, просто пишет в консоль 3a c5 и всё, в независимости от того есть ли файл, или его нет. Подскажете что не так?
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,045
14.09.2017, 18:07 4
Цитата Сообщение от Alex_LogON Посмотреть сообщение
Подскажете что не так?
А что не так? Указанный байт в файле переписывает?
0
Alex_LogON
0 / 0 / 0
Регистрация: 01.05.2015
Сообщений: 7
14.09.2017, 18:38  [ТС] 5
Да уже всё, спасибо. Неправильно указывал путь к файлу. Теперь всё работает.
0
14.09.2017, 18:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2017, 18:38

Инвертировать строки
Доброго времени суток. Смотрел несколько похожих задач, но там все делалось с...

Инвертировать строку
Определите класс strtype_a, в состав которого входит функция-член invert,...

Инвертировать столбцы
Помогите,пожалуйста переписать частично код программы...Преподаватель говорит...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru