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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
ABTOP
36 / 36 / 2
Регистрация: 09.06.2008
Сообщений: 324
#1

Функция, которая принимает буфер памяти - C++

05.03.2009, 19:25. Просмотров 1984. Ответов 14
Метки нет (Все метки)

Код
Напишите функцию, которая принимает буфер памяти и возвращает число long. 
Известно, что передается некая структура и число, которое нужно извлечь, 
начинается с пятого байта.
Подскажите пожалуйста как зделать функцию, которая принимает буфер памяти... Хотя бы алгоритм или вспомагающие функции.

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

функция, которая “возвращает” результат четырёх арифметических ? - C++
Написать функцию, которая “возвращает” (через свои аргументы) результат четырёх арифметических действий над своими двумя первыми...

Функция fopen не принимает параметр String - C++ Builder
Имеется код: FILE *F; TStringList * Text = new TStringList; Text->LoadFromFile("Текстовые файлы"); for(int i = 0; i < Text->Count;...

Утечка памяти. Функция работы с изображениями выполняется в стороннем потоке. - C++ Builder
Доброго времени суток! Не могу решить проблему(( Есть функция работы с изображениями и выполняется эта функция в стороннем потоке... ...

Функция, которая определяет русские буквы в строке - C++ Builder
Здравствуйте!!! Ребята, подскажите, по такому вопросу фукция isalpha определяет латинские буквы в строке , а какая функция определяет...

Функция, которая получает по ссылке две переменные - C++ Builder
1.Разработать функцию, которая получает по ссылке две переменные А и В (любого типа данных) и обрабатывает их в соответствии с некоторым...

Функция, которая возвращает true, если число нечётное - C++ Builder
В Delphi есть функция Odd( Integer ) которая возвращает true если число нечётное. Возможно ли её вызвать из C++? Я что-то не нашёл ничего...

14
Mecid
680 / 229 / 4
Регистрация: 15.10.2007
Сообщений: 1,247
05.03.2009, 19:57 #2
C
1
long f(char *p){}
объявление функции принимающей буфер памяти
0
Night_Light
17 / 17 / 2
Регистрация: 14.02.2009
Сообщений: 86
05.03.2009, 20:00 #3
Цитата Сообщение от ABTOP Посмотреть сообщение
Код
Напишите функцию, которая принимает буфер памяти и возвращает число long. 
Известно, что передается некая структура и число, которое нужно извлечь, 
начинается с пятого байта.
Подскажите пожалуйста как зделать функцию, которая принимает буфер памяти... Хотя бы алгоритм или вспомагающие функции.

И как извлечь число начиная с пятого байта?
"Некую структуру" тебе скорее всего надо передавать в виде указателя на void. А чтобы получить указатель на 5 байт - можно попробовать прикастить void* к char*, у которого 5 байт можно получить обратившись к 5 элементу через индекс.

вот пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
void main()
{
    std::cout<< sizeof(char)<<std::endl;
    std::cout<< sizeof("AAaab")<<std::endl;
 
    const char mas[] = "AAaabddddddc";
    void* ptr = (void*)mas;
    char* charVar = (char*)ptr;
    std::cout<< charVar[4] <<std::endl;
}
как видно на консоле - размер sizeof("AAaab") равен 5 + 1 байт ( 1 - это конец строки). а обращение к charVar[4] выводит символ b.
Проблема только в том, что размер char в 1 байт кажется не документирован. я пробовал на VS 2003.
0
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
05.03.2009, 21:43 #4
Нет. Стандарт, 5.3.3/1 гласит, что "sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1; ...."
0
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
05.03.2009, 23:22 #5
C++
1
2
3
4
5
long five(void* ptr)
{
    unsigned long lptr=5+unsigned long(ptr);
    return *((long*)lptr);
}
1
ABTOP
36 / 36 / 2
Регистрация: 09.06.2008
Сообщений: 324
07.03.2009, 15:55  [ТС] #6
Цитата Сообщение от Humanitis Посмотреть сообщение

Код C++
  1. <LI style="BACKGROUND: #ffffff">long five(void* ptr)<LI style="BACKGROUND: #f8f8f8">{<LI style="BACKGROUND: #ffffff">****unsigned long lptr=5+unsigned long(ptr);<LI style="BACKGROUND: #f8f8f8">****return *((long*)lptr);
  2. }

чесно говоря не думал что void* a принимает буфер памяти...


Цитата Сообщение от Humanitis Посмотреть сообщение

Код C++
  1. <LI style="BACKGROUND: #ffffff">long five(void* ptr)<LI style="BACKGROUND: #f8f8f8">{<LI style="BACKGROUND: #ffffff">****unsigned long lptr=5+unsigned long(ptr);<LI style="BACKGROUND: #f8f8f8">****return *((long*)lptr);
  2. }
идея конечно хорошая но как оно будет принимать начиная с 6 байта если я введу очень маленьное значение например 14.31 то оно будет крашиться.

передается некая структура и число - вот эта строка меня вводит в ступор.

может надо работать с буфером обмена?

Добавлено через 1 минуту 25 секунд
мдя... что-то не хочет код цытироваться...
0
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
07.03.2009, 16:36 #7
идея конечно хорошая но как оно будет принимать начиная с 6 байта если я введу очень маленьное значение например 14.31 то оно будет крашиться.
Не понял,что вы имели ввиду.
передается некая структура и число - вот эта строка меня вводит в ступор.
На самом деле звучит так
Известно, что передается некая структура. Число, которое нужно извлечь,
начинается с пятого байта.

например
C++
1
2
3
4
5
6
struct test
{
int *a;
long b;
 
};
При расположении структуры в памяти, число b будет расположенно начиная с 5 байта.
Все конечно зависит,от компилятора.
А может я ошибаюсь
0
ABTOP
36 / 36 / 2
Регистрация: 09.06.2008
Сообщений: 324
07.03.2009, 21:00  [ТС] #8
Цитата Сообщение от Humanitis Посмотреть сообщение
Не понял,что вы имели ввиду.
я зделал так... нахожу начало 5го байта стуктуры и начинаю читать но если число маленькое не в конце диапазона то программа крашиться потмоу что этот бит отсутствует...
0
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
07.03.2009, 22:52 #9
Э,может я конечно туплю последнее время. Но число любого типа будет занимать одно и тоже количество байт в памяти,независимо от своей величины
0
ABTOP
36 / 36 / 2
Регистрация: 09.06.2008
Сообщений: 324
08.03.2009, 21:38  [ТС] #10
Цитата Сообщение от Humanitis Посмотреть сообщение
Э,может я конечно туплю последнее время. Но число любого типа будет занимать одно и тоже количество байт в памяти,независимо от своей величины
Я с тобой согласен, а компилятор нет... Программа крашитсья и всё...
0
ISergey
Maniac
Эксперт С++
1377 / 888 / 54
Регистрация: 02.01.2009
Сообщений: 2,675
Записей в блоге: 1
09.03.2009, 04:07 #11
Цитата Сообщение от CheshireCat Посмотреть сообщение
Нет. Стандарт, 5.3.3/1 гласит, что "sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1; ...."
Блин не по теме, но дай ссылку на "Стандарт"(если есть на русском)
0
ABTOP
36 / 36 / 2
Регистрация: 09.06.2008
Сообщений: 324
09.03.2009, 21:08  [ТС] #12
Как на С/С++ изменить значение адреса. Конкретнее на примере:
получаю адресс 0x0013FF78 и мне надо изменить а точнее прибавить к текущему значению 4 байта.. как это зделать?
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
09.03.2009, 22:17 #13
0x0013FF78+4
0
ABTOP
36 / 36 / 2
Регистрация: 09.06.2008
Сообщений: 324
09.03.2009, 23:00  [ТС] #14
Цитата Сообщение от Vourhey Посмотреть сообщение
0x0013FF78+4
C
1
2
3
4
5
void f(void *v)
{
long *p= (v+0x5);
cout<<v<<" + 5 = "<<p<<endl;
};
а так оно не хочет работать ... Говорит что неизвестен размер void *.
0
Mecid
680 / 229 / 4
Регистрация: 15.10.2007
Сообщений: 1,247
09.03.2009, 23:24 #15
Цитата Сообщение от ABTOP Посмотреть сообщение
а так оно не хочет работать ... Говорит что неизвестен размер void *
c типом void * не допускаются матем вычисления
для начала
C
1
2
3
4
5
void f(void *v)
{
long *p= (long*)((unsigned char*)v+0x5);
cout<<v<<" + 5 = "<<p<<endl;
};
1
09.03.2009, 23:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2009, 23:24
Привет! Вот еще темы с ответами:

Функция, которая возвращает полный путь к ехе-шнику - C++ Builder
есть такая функция которая вытаскивает полный путь откуда запустился ехе-шник, не помню вот...

Есть ли функция, которая поменяет местами буквы в строке? - C++ Builder
допустим у меня будет массив TStringList *inv - в них будут хранится слова...и мне нужно чтоб пользователь увидел каждое слово...

Функция, которая запускает приложение и ждет, пока его не закроют - C++ Builder
Как сделать следующее: есть метод (функция), которая запускает какое то приложение, например, Internet Explorer. Необходимо, чтобы...

Функция которая принимает любой класс - C++
Здравствуйте программисты читаю книгу,и тут столкнулся с проблемой : void prins(int a,class_type t) // class_type не существует (а...


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

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

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