![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Данные из массива
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