Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.65/37: Рейтинг темы: голосов - 37, средняя оценка - 4.65
1 / 1 / 1
Регистрация: 26.12.2010
Сообщений: 8
1

Как изменить один байт в бинарном файле?

26.12.2010, 00:56. Показов 6992. Ответов 3
Метки нет (Все метки)

Здравствуйте.
Второй день бьюсь над вопросом, просмотрел много примеров, но не понимаю, помогите.
Мне нужно изменить один байт в бинарном файле. Для этого использую следующий код.
Например, есть размером 1 гигабайт, мне нужно изменить десятый байт, записать в него 0x0A.
Для этого использую следующий код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void BinFile::writeByte(long pos, char byte)
{
    ofstream bin(this->filename, ios_base::binary);
    bin.seekp(pos,ios_base::beg);
    bin.put(byte);
    bin.close();
}
 
int main()
{
   int main ()
  {
     BinFile f("file.bin");
     f.writeByte(10, 10);
  }
}
В итоге, десятый байт дейтвительно становится равен 0x0A, но остальные становятся равны 0х00.
Может быть так, и должно быть?
Вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
using namespace std;
 
int main()
{
    FILE *fw;
    fw = fopen("pack.pck", "wb");
    char ch = 'x';
    fseek(fw, 0, SEEK_SET);
    fwrite(&ch, sizeof(char), 1, fw);
    fclose(fw);
    return 0;
}
приводит к тому же результату - первый (нулевой) байт 0х78, остальные - 0.
Подскажите, в чем дело может быть? Сон потерял =)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2010, 00:56
Ответы с готовыми решениями:

Как изменять 1 байт в бинарном файле?
Здравствуйте! Требуется помощь. Необходимо создать неcколько исполняемых файлов под windows,...

Шальной байт в бинарном файле
Здравствуйте, форумчане. Столкнулся с такой проблемой при использовании оператора write(memblock,...

Не получается изменить данные в бинарном файле
Здравствуйте. Мучаюсь, не пойму как сделать чтобы изменить данные. Программа обращается к файлу с...

Как заменить цифру в бинарном файле?
В программе нужно заменить цифру в бинарном файле. Возникла проблема с функцией замены swap_val....

3
37 / 36 / 4
Регистрация: 08.08.2010
Сообщений: 162
26.12.2010, 01:24 2
C
1
fw = fopen("pack.pck", "wb")
Вы открываете файл только для записи.
При этом всё его содержимое уничтожается.
В Си нужно поставить
C
1
fw = fopen("pack.pck", "r+b")
В С++ ищите сами флаг для чтения и записи.
1
1 / 1 / 1
Регистрация: 26.12.2010
Сообщений: 8
26.12.2010, 01:59  [ТС] 3
Огромное спасибо, вполне устраивает вариант на С.

Добавлено через 30 минут
Ну и на всякий случай, чтобы поставить точки над i напишу здесь флаги С++ (чтобы от меня тоже была польза =) )
C++
1
2
3
4
5
6
7
void BinFile::writeByte(long pos, char byte)
{
    ofstream bin(this->filename, ios_base::in|ios_base::binary); //фактически "r+b"
    bin.seekp(pos,ios_base::beg);
    bin.put(byte);
    bin.close();
}
1
0 / 0 / 0
Регистрация: 11.12.2015
Сообщений: 2
11.12.2015, 15:33 4
Здравствуйте!
Требуется помощь. Необходимо создать неcколько исполняемых файлов под windows, позволяющих изменять 1 байт в файле rungame.exe(бинарный), который будет находится в одной папке, с созданными файлами. При запуске файла, должно значение по адресу 548d0h, поменяться на 01 (единица). Попробовал использовать вышерасположенный код, но ничего не получилось... Если кто-нибудь может предложить что-то реально работающее, буду очень рад.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2015, 15:33

Функция: изменить старший байт числа на заданное значение, не изменяя младший байт
функция изменяет старший байт числа на заданное значение не изменяя младший байт. как можно проще

Посчитать в файле количество нулевых байт и различных байт
Посчитать в файле кол-во нулевых байт и различных байт Кто решит буду весьма благодарен!:drink:

Как в бинарном файле (.dat) удалять и редактировать выбранную запись
Подскажите как в бинарном файле(.dat) удалять и редактировать выбранную запись(case 5 и case 6): ...

Как изменить первые 5 байт в строке типа char
Ламерский вопрос! Есть строка,как изменить в ней первые 5 байт, в них должна храниться длина строки


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

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

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