Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Dimarik__
21 / 21 / 1
Регистрация: 29.04.2010
Сообщений: 444
#1

Изменить четные и нечетные байты - C++

13.04.2012, 18:44. Просмотров 469. Ответов 6
Метки нет (Все метки)

вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
    HANDLE fileHandleNEW =(HANDLE)((DWORD)fileHandle + 1000);
    CopyMemory(fileHandleNEW, fileHandle, DWORD_sizeOfFile);
    int* iSymbol = 0;
    for (int i = 0; i < DWORD_sizeOfFile; i++)
    {
        *iSymbol += (int*)((int)fileHandleNEW + i);
if(i%2 == 0)  
            *iSymbol = 222;
        else
            *iSymbol = 223;
//и так далее...
fileHandleNEW содержит адрес начала файла в памяти
задача: обратиться к каждому байту в памяти и изменить четные на 222, нечетные на 223.
Никак не могу понять, почему у меня здесь ошибка:
C++
1
*iSymbol += (int*)((int)fileHandleNEW + i);
Обращаюсь к значению, расположенному по адресу fileHandleNEW +счетчик и пытаюсь установить его на 222 и 223.

Добавлено через 4 минуты
и еще. Как средствами WinApi записать значения байт памяти от адреса adr1 до адреса adr2 в текстовый файл?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2012, 18:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Изменить четные и нечетные байты (C++):

Проверить правило "четные/нечетные элементы имеют четные/нечетные индексы" - C++
2.Программа осуществляет ввод массива из 150 эллементов. Затем она проверяет правило&quot;четные элементы имеют чётные индексы, нечетные...

Переставить в строке все элементы из нечетных позиций на четные, а четные на нечетные - C++
В квадратном массиве содержатся как отрицательные, так и положительные элементы. Если среднее арифметическое в строке массива по модулю...

Переставить в строке все элементы матрицы из нечетных позиций на четные, а четные на нечетные, по условию - C++
Доброго времени суток. Прошу помощи решить задачку к экзамену, задача звучит так: Поиск не помог, а изучать катастрофически не...

Четные и нечетные цифры - C++
Выдать все четные и нечетные цифры натурального числа n&gt; 10000 слева направо и справа налево

Четные и нечетные числа - C++
Пользователь вводит с клавиатуры число. Вывести на экран Y, если число четное и N, если число не четное. с++

Четные и нечетные столбцы - C++
Что тут не правильно? Вывод должен быть 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 #include &lt;iostream&gt; #include &lt;math.h&gt; #include...

6
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
13.04.2012, 18:56 #2
Цитата Сообщение от Dimarik__ Посмотреть сообщение
1
*iSymbol += (int*)((int)fileHandleNEW + i);
А в чём суперхитрость сложения всех адресов?
0
Dimarik__
21 / 21 / 1
Регистрация: 29.04.2010
Сообщений: 444
13.04.2012, 19:07  [ТС] #3
fileHandleNEW - адрес начала файла
i - смещение
С помощью i перемещаемся по файлу
fileHandleNEW + i - нужный байт (точнее его адрес), с которым необходимо работать
0
Unwebo
20 / 20 / 3
Регистрация: 13.04.2012
Сообщений: 39
13.04.2012, 19:15 #4
Во-первых, что за ошибка?
Во время компиляции или исполнении?
Во-вторых, покажите, как вы помещаете файл в память и присваиваете переменной fileHandle начало этого участка.
Просто меня смущает, что вы используете тип HANDLE.

Ну и правильнее, наверное, всеже
C++
1
*iSymbol += (int)fileHandleNEW + i;
или
C++
1
iSymbol += (int*)((int)fileHandleNEW + i);
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
13.04.2012, 19:31 #5
Цитата Сообщение от Dimarik__ Посмотреть сообщение
fileHandleNEW - адрес начала файла
i - смещение
С помощью i перемещаемся по файлу
Это понятно. Но. У тебя в iSymbol был ноль. Адрес начала файла+смещение=другой адрес, ты его пытаешься сложить с iSymbol, результат поместить в iSymbol. После этого в iSymbol адрес. Теперь ты меняешь смещение и складываешь его с iSymbol с помещением в iSymbol. Получаешь сумму адресов. И так по всем адресам. Зачем? К тому же делаешь это не правильно. iSymbol - указатель, если он равен нолю, то указывает в никуда. А потом ты обращаешься к *iSymbol, но это данное, на которое указывает iSymbol. Но он не указывает ни куда.
1
Dimarik__
21 / 21 / 1
Регистрация: 29.04.2010
Сообщений: 444
13.04.2012, 21:36  [ТС] #6
спасибо. разобрался.
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
14.04.2012, 10:06 #7
Цитата Сообщение от Dimarik__ Посмотреть сообщение
(int*)((int)fileHandleNEW + i);
Зачем? С указателем можно непосредственно складывать обычное целое, тогда будет автоматически учтён размер ячейки, чем типизирован указатель (для char* это один байт, для float * четыре). Указатель можно не типизировать (void*), тогда размер ячейки будет 1 байт. Во всех случаях обычное целое - смещение, измеряемое в ячейках.
1
14.04.2012, 10:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2012, 10:06
Привет! Вот еще темы с ответами:

Вывести четные и нечетные числа - C++
С n чисел, вводимых с клавиатуры, вывести отдельно четные и не четные.

Сначала нечетные, потом четные - C++
Привет всем, подскажите, нужно сделать программу, которая из массива сначала выпишет нечетные числа, а потом четные, я взял похожее задание...

Разделить файл на четные и нечетные числа - C++
Программа открывает файл,заполненный случ.числами в диапозоне -500 500.затем считывает из него данные,разделяет четные и нечетные числа и...

Переставить в матрице четные и нечетные столбцы - C++
Даны две матрицы размерности 7х7 целых случайных чисел. Переставить в них четные и нечетные столбцы. Собственно вопрос: Как переставить...


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

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

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