131 / 131 / 157
Регистрация: 11.04.2015
Сообщений: 343
1

Прямой доступ к памяти

07.04.2017, 22:03. Показов 1976. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите как сделать чтобы функция ChangeId меняла член структуры,
я рассматриваю что после padding в структуре следующая структура памяти 4байта дата, 1байт айди и следующие три пустые

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
typedef struct {
    uint32_t data;
    uint8_t id;
}TDateTime_t;
 
 
void ChangeData(TDateTime_t *self, uint32_t value) {
    uint32_t *ptr = &self[0];
    *((uint32_t *)ptr) = value;
}
 
void ChangeId(TDateTime_t *self, uint8_t value) {
    uint8_t *ptr = &self[0] + 4;
    *((uint8_t *)ptr) = value;
}
 
int main() {
    TDateTime_t DateTime = { 0 };
    ChangeData(&DateTime, 0xFFFFFFFF);
    ChangeId(&DateTime, 0xFF);
    return 0;
Добавлено через 6 минут
я знаю что для таких вещей void* тоже подходит? тыкните пальцем что не так
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2017, 22:03
Ответы с готовыми решениями:

Прямой доступ к файлу
Всем привет,нужна небольшая помощь. Нужно сделать с прямым доступом к файлу,чтобы считывалось не...

Найти уравнение прямой, перпендикулярной прямой a1x+b1y+c1=0 и проходящей через точку
Надо найти уравнение прямой, перпендикулярной прямой a1x+b1y+c1=0 и проходящей через точку...

Переписать в файл Н коэффициенты прямых, которые: а) параллельны первой прямой б) пересекаются с последней прямой
Прямая на плоскости задается уравнением Ах+Ву+С=0, где А и В одновременно не равны 0. Пусть...

Дано координаты точек x1x2x3. и уравнение прямой y=ax+b вывести масив С в котором координаты точек этой прямой
Пытался сделать так потому что забыл как решение примера занести в масив на выводе огромные числа...

3
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
07.04.2017, 23:07 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
struct Test 
{
  int date, id;
};
 
void ChangeDate(struct Test *t, int d);
 
int main()
{
}
 
void ChangeDate(struct Test *t, int d)
{
  t->date = d;
}
Добавлено через 29 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
struct Test 
{
  int date, id;
};
 
void ChangeDate(void *t, int d);
void ChangeId(void *t, int id);
 
int main()
{
}
 
void ChangeDate(void *t, int d)
{
  (*(int *)t) = d;
}
 
void ChangeId(void *t, int id)
{
 (*(int *)(t + sizeof(int)))= id;
}
0
131 / 131 / 157
Регистрация: 11.04.2015
Сообщений: 343
08.04.2017, 00:54  [ТС] 3
Цитата Сообщение от Nemovok Посмотреть сообщение
int date, id;
я очень хочу свой вариант, где есть 4+1+3 выравнивае,
хотя я и понимаю что с разными компиляторами это может получиться и как 4+3+1,
вариант что предложили Вы слишком простой, хочу войд указатели
0
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
08.04.2017, 17:02 4
Цитата Сообщение от andreyka93 Посмотреть сообщение
я рассматриваю что после padding в структуре следующая структура памяти 4байта дата, 1байт айди и следующие три пустые
C
1
2
3
4
5
6
7
#pragma pack(push, 1)
typedef struct {
    uint32_t data;
    uint8_t id;
    uint8_t gap[3];
}TDateTime_t;
#pragma pack(pop)
Добавлено через 1 час 20 минут
Цитата Сообщение от andreyka93 Посмотреть сообщение
хочу войд указатели
C
1
TDateTime_t *
замените на
C
1
void *
а
C
1
&self[0]
на
C
1
self
и в
C
1
*((uint8_t *)ptr)
достаточно писать
C
1
*(uint8_t *)ptr
0
08.04.2017, 17:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2017, 17:02
Помогаю со студенческими работами здесь

Прямой доступ к памяти
Как прочитать произвольный адрес оперативной памяти? Заранее спасибо!

Прямой доступ к видео памяти
Здравствуйте, подскажите как организовать прямой доступ к видео памяти на современно VGA/DVI видео...

Есть ли средства для питон, позволяющие получить прямой доступ к памяти?
Есть ли средства для питон, которые бы позволили напрямую обращаться к памяти?

Прямой доступ к переменным
Доброго времени суток, форумчане. Сразу оговорю, что название темы может не совсем корректно...


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

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

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