Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Данные из массива


Nicola ©   (2008-01-25 12:28:00) 

У меня есть такой массив:
array[0..xx] of Byte

И сам вопрос, как мне с некоторой позиции в массиве получить числовые данные: Byte, Word, DWord, UInt64, ShortInt, SmallInt, LongInt, Int64.

Ну например, у меня такой массив:

$00 $01 $12 $34 $56 $78 $79

и мне нужно начиная с 3 элемента получить Word, который в этом случае будет: $1234

Хочется узнать наиболее грамотное решение. Спасибо.


Anatoly Podgoretsky   (2008-01-25 18:50:00) [1]

> Семеныч  (25.01.2008 16:58:10)  [10]

Не обратный, а прямой.


Dib@zol   (2008-01-25 17:16:00) [2]

А если тупо с помощью PUSH и MOV BYTE/WORD/DWORD/QWORD/TBYTE PTR [EAX] скинуть в стек, а потом POP-ом достать?


clickmaker   (2008-01-25 17:10:00) [3]


> [12] palva ©   (25.01.08 17:06)
>
> > Обратный по отношению к чему?
>
> Обратный по отношению к прямому

- Вам в какую сторону?
- В противоположную


palva   (2008-01-25 17:06:00) [4]


> Обратный по отношению к чему?

Обратный по отношению к прямому.


DiamondShark   (2008-01-25 17:02:00) [5]


> Как раз поэтому обратный порядок и получается

Получается где?
Обратный по отношению к чему?


Семеныч   (2008-01-25 16:58:00) [6]

> MBo ©   (25.01.08 16:49) [8]

Да, неточно выразился. Младший по младшему, конечно. Как раз поэтому обратный порядок и получается.
:о)


Сергей М.   (2008-01-25 16:54:00) [7]

Мастера выворачиваются наизнанку, а атем временем втор "шедевра" плюет с высокой колокольни.

Шоу маст гоу он ?)


MBo   (2008-01-25 16:49:00) [8]

>Семеныч
про обратный порядок и $3412 - верно, только во фразе
"старший байт по младшему адресу, младший байт по старшему адресу"
всё наоборот.


Семеныч   (2008-01-25 16:24:00) [9]

> DiamondShark ©   (25.01.08 16:18) [6]

В задаче речь идет о целых числах. Теперь тоже вряд ли?


DiamondShark   (2008-01-25 16:18:00) [10]


> На платформах x86 байты хранятся в обратном порядке (старший
> байт по младшему адресу, младший байт по старшему адресу).

Эт врядли.


Семеныч   (2008-01-25 16:13:00) [11]

> Nicola   (25.01.08 12:28)

var A: packed array[0..xx] of Byte;

> как мне с некоторой позиции в массиве получить
> числовые данные: Byte, Word, DWord, UInt64, ShortInt, SmallInt,
> LongInt, Int64.

ByteValue = PByte(@A[i])^;
WordValue = PWord(@A[i])^;
....

> Ну например, у меня такой массив:
> $00 $01 $12 $34 $56 $78 $79
> и мне нужно начиная с 3 элемента получить Word, который
> в этом случае будет: $1234

На платформах x86 байты хранятся в обратном порядке (старший байт по младшему адресу, младший байт по старшему адресу). Поэтому при использовании такого способа получим значение $3412. Если это не устраивает, то в полученнном числе нужно провести своппинг байтов.


palva   (2008-01-25 13:03:00) [12]

> и мне нужно начиная с 3 элемента получить Word, который в этом случае будет: $1234
Каким он будет - это отдельный вопрос. Но если вам надо получить $1234, то, наверно, так:
w:= a[2] SHL 8 + a[3]


Palladin   (2008-01-25 12:45:00) [13]

Эмм... да, со всех сторон
а вот у тебя девствительно бред...


Nicola   (2008-01-25 12:43:00) [14]

Эмм... а это наиболее хорошее/оптимальное решение?

Я почему то думал, что мне нужно копать куда-то в сторону такого:

for i := 0 to 2 {word}- 1 do
   Inc(Result, PByte(LongWord(Array) + i)^ shl ((...i) * 8))


Ну я конечно бред написал, я просто пытался как-то в таком ключе реализовать.


Palladin   (2008-01-25 12:28:00) [15]

Move + F1


Наверх

Титульная страница Поиск, карта сайта Написать письмо