powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вычислить офсет в памяти в С.
14 сообщений из 39, страница 2 из 2
Вычислить офсет в памяти в С.
    #39221335
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TМожно просто по адресу получить номер записи, изменить номер и получить обратно адрес
Код: sql
1.
2.
3.
номер = (адрес - адрес / 64 * 4) / 12
номер = номер - N
адрес = номер * 12 + номер / 4 * 5


работает. не понимаю как но работает. :)
...
Рейтинг: 0 / 0
Вычислить офсет в памяти в С.
    #39221340
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tчуть напутал
Код: sql
1.
адрес = номер * 12 + номер / 5 * 4


предыдущий вариант как раз работал.
...
Рейтинг: 0 / 0
Вычислить офсет в памяти в С.
    #39221345
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Dima TМожно просто по адресу получить номер записи, изменить номер и получить обратно адрес
Код: sql
1.
2.
3.
номер = (адрес - адрес / 64 * 4) / 12
номер = номер - N
адрес = номер * 12 + номер / 4 * 5


работает. не понимаю как но работает. :)
неправильно работает, я 4 байта на заголовок 0-й страницы не учел. Т.е. при номер = 0 адрес будет 4, а тут 0.
Так правильно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
// номер по адресу
int addr2num(int addr) {
	return (addr - addr / 64 * 4 - 4) / 12;
}

// адрес по номеру
int num2addr(int num) {
	return num * 12 + num / 5 * 4 + 4;
}
...
Рейтинг: 0 / 0
Вычислить офсет в памяти в С.
    #39221374
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tjenya7пропущено...

работает. не понимаю как но работает. :)
неправильно работает, я 4 байта на заголовок 0-й страницы не учел. Т.е. при номер = 0 адрес будет 4, а тут 0.
Так правильно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
// номер по адресу
int addr2num(int addr) {
	return (addr - addr / 64 * 4 - 4) / 12;
}

// адрес по номеру
int num2addr(int num) {
	return num * 12 + num / 5 * 4 + 4;
}



спасибо. :)
...
Рейтинг: 0 / 0
Вычислить офсет в памяти в С.
    #39221425
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кстати а как мне красиво найти количество записанных записей?
сейчас я делаю так.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
static inline uint32_t LOGGER_GetTotalLogs(void)
{
	uint32_t total_logs;
	if (loggerParam.lognum >= 5) //last log on page
		total_logs = loggerParam.page * 5;
	else
		total_logs = ((loggerParam.page-1) * 5) + loggerParam.lognum;

	return total_logs;
}
...
Рейтинг: 0 / 0
Вычислить офсет в памяти в С.
    #39221439
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Писал уже что телепатов тут нет. Пиши понятнее.
loggerParam.lognum и loggerParam.page что в них хранится?
...
Рейтинг: 0 / 0
Вычислить офсет в памяти в С.
    #39221440
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TПисал уже что телепатов тут нет. Пиши понятнее.
loggerParam.lognum и loggerParam.page что в них хранится?
loggerParam.page - номер текущей страницы.
loggerParam.lognum - номер текущей записи на странице.
...
Рейтинг: 0 / 0
Вычислить офсет в памяти в С.
    #39221451
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нумерация с нуля, то достаточно
Код: sql
1.
return loggerParam.page * 5 + loggerParam.lognum + 1
...
Рейтинг: 0 / 0
Вычислить офсет в памяти в С.
    #39221464
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TЕсли нумерация с нуля, то достаточно
Код: sql
1.
return loggerParam.page * 5 + loggerParam.lognum + 1


ой. действительно. у меня нумерация с нуля. но +1 не надо. я уже на текущей записи.
...
Рейтинг: 0 / 0
Вычислить офсет в памяти в С.
    #39221471
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня вот в школе учили что любая формула содержит греческие, латинские буквы
в виде условных обозначений, а потом внизу - расшифровка что есть что. Если
букв не хватает - воодятся верхние и нижние индексы и штрихи.

Пример. Закон Ома.



Где:
I - ток в Амперах
U - напряжение в Вольтах
R - сопротивление в Омах.

Красиво. Лаконично. Строго.

Странно но для современного инженера-айтишника подобная система обозначений
представляется чем-то немыслимо трудным или просто недоступным для
понимания.
...
Рейтинг: 0 / 0
Вычислить офсет в памяти в С.
    #39221476
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7ой. действительно. у меня нумерация с нуля. но +1 не надо. я уже на текущей записи.
Если под текущей подразумевается следующая пустая (куда писать в следующий раз), то +1 не надо.

PS Учись четче формулировать свои мысли. Нет тут телепатов.
...
Рейтинг: 0 / 0
Вычислить офсет в памяти в С.
    #39221482
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonМеня вот в школе учили что любая формула содержит греческие, латинские буквы
в виде условных обозначений, а потом внизу - расшифровка что есть что. Если
букв не хватает - воодятся верхние и нижние индексы и штрихи.

Пример. Закон Ома.



Где:
I - ток в Амперах
U - напряжение в Вольтах
R - сопротивление в Омах.

Красиво. Лаконично. Строго.

Странно но для современного инженера-айтишника подобная система обозначений
представляется чем-то немыслимо трудным или просто недоступным для
понимания.

а что именно коробит ваш глаз?
...
Рейтинг: 0 / 0
Вычислить офсет в памяти в С.
    #39221492
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tjenya7ой. действительно. у меня нумерация с нуля. но +1 не надо. я уже на текущей записи.
Если под текущей подразумевается следующая пустая (куда писать в следующий раз), то +1 не надо.

PS Учись четче формулировать свои мысли. Нет тут телепатов.

то есть я делаю немного по другому. я записываю в память и потом инкрементирую loggerParam.lognum++ подготавливая к следующей записи. у меня первая запись 1 а не ноль. мне так удобней потом. поэтому нужно даже так total_logs = (loggerParam.page * LOGS_PER_PAGE) + (loggerParam.lognum-1);
...
Рейтинг: 0 / 0
Вычислить офсет в памяти в С.
    #39221505
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7у меня первая запись 1 а не ноль. мне так удобней потом. поэтому нужно даже так total_logs = (loggerParam.page * LOGS_PER_PAGE) + (loggerParam.lognum-1);
Если так, то все верно, надо -1
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вычислить офсет в памяти в С.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]