Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Считывание байт 
V
    Опции темы
Ak47black
  Дата 22.3.2008, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: 1
Всего: 0



Здравствуйте.
Подскажите если у кого есть идея или предположение как можно сделать следующую универсальную функцию.
Код

function GetNumber(P: Pointer; NumberSize: Byte; Position: Integer): Byte;
begin

end;

Функция получает:
  • P - указатель на ранее выделенную память в которой хранится массив чисел.
  • NumberSize -  Длину одного числа в битах, тоесть сколько одно число занимает бит
  • Position - позицию в памяти, тоесть индекс в массиве.
Функция возвращает число полученное из массива чисел учитывая NumberSize и Position.

Тоесть например функция получила память которая выглядит вот так
user posted image
Допустим NumberSize = 3 тогда если разделить память то числам, то она будет выглядеть вот так
user posted image
Если пронумеровать то будет выглядеть вот так
user posted image
Допустим Position = 4 тогда берём вот эти биты
user posted image
Тогда 100b = 4 возвращаем 4.


Это сообщение отредактировал(а) Ak47black - 22.3.2008, 13:54
PM MAIL   Вверх
Albinos_x
Дата 22.3.2008, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



хм... возниакет два вопроса, если число битовое, то зачем передавать размерность?
вопрос 2: если всётаки не битовое, то тогда почему возвращаем битовое? может в этом случае целесообразно передать адрес на память?

а вообще я думаю проблем с этим нет...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Alix
Дата 22.3.2008, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 7
Всего: 23



в чем беда? получаем смещение в байтах как (NumberSize * Position) div 8, а потом берем нужные биты наложением соответствующей маски and. Кстати, тут такой вопрос, NumberSize может быть больше 8? А даже если и не может, то все равно надо учитывать моменты, когда биты берутся из двух (или более) смежных байт.


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
Albinos_x
Дата 22.3.2008, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата(Ak47black @  22.3.2008,  00:01 Найти цитируемый пост)
бит

Цитата(Ak47black @  22.3.2008,  00:01 Найти цитируемый пост)
Тогда 100b = 4 возвращаем 4.

видимо я не совсем понял вопрос...
но тут тоже особых проблем нет, получаешь адрес первого байта
Цитата(Alix @  22.3.2008,  01:02 Найти цитируемый пост)
(NumberSize * Position) div 8

 и смещение в битах
smr:=(NumberSize * Position) mod 8;
, читаешь начиная с него по длине NumberSize, естественно, если меньше 8, то 1 байт, 
потом удаляешь лишнее методом сдвигов влево вправо, или 
Цитата(Alix @  22.3.2008,  01:02 Найти цитируемый пост)
маски and







--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Ak47black
Дата 22.3.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: 1
Всего: 0



А если например одно число в двух байтах, то как извлечь? Из двух байт слепить?
Цитата

Кстати, тут такой вопрос, NumberSize может быть больше 8?

Число может находится в двух байтах, но NumberSize не может быть больше 8.


Это сообщение отредактировал(а) Ak47black - 22.3.2008, 14:00
PM MAIL   Вверх
Albinos_x
Дата 22.3.2008, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата(Ak47black @  22.3.2008,  13:44 Найти цитируемый пост)
Из двух байт слепить?

да...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
TName
Дата 31.3.2008, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 16.3.2008

Репутация: нет
Всего: нет



а как насчет shl или shr, а потом сделать XOR по нужной маске?
по-моему, при работе с побитовой информацией вариантов лучше нет smile
ну и про copymemory не забыть....
Сейчас не охота пример придумывать, но любопытство вас должно спасти.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0498 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.