Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.17;
Скачать: CL | DM;

Вниз

Данные из массива   Найти похожие ветки 

 
Nicola   (2008-01-25 12:28) [0]

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

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

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

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

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

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


 
Palladin ©   (2008-01-25 12:28) [1]

Move + F1


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

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

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

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


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


 
Palladin ©   (2008-01-25 12:45) [3]

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


 
palva ©   (2008-01-25 13:03) [4]

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


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

> 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. Если это не устраивает, то в полученнном числе нужно провести своппинг байтов.


 
DiamondShark ©   (2008-01-25 16:18) [6]


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

Эт врядли.


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

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

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


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

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


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

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

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


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

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

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


 
DiamondShark ©   (2008-01-25 17:02) [11]


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

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


 
palva ©   (2008-01-25 17:06) [12]


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

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


 
clickmaker ©   (2008-01-25 17:10) [13]


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

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


 
Dib@zol ©   (2008-01-25 17:16) [14]

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


 
Anatoly Podgoretsky ©   (2008-01-25 18:50) [15]

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

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



Страницы: 1 вся ветка

Текущий архив: 2008.02.17;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.026 c
2-1201500506
psa247
2008-01-28 09:08
2008.02.17
получить ListView.Data ?


2-1201335591
MNNN
2008-01-26 11:19
2008.02.17
Рисование иконки


8-1170185135
johnvp
2007-01-30 22:25
2008.02.17
Как выдать звук накаждый моно-канал отдельно?


15-1200226303
SerJaNT
2008-01-13 15:11
2008.02.17
Перетаскивание блоков


6-1180619634
Леван Варшанидзе
2007-05-31 17:53
2008.02.17
Работа с FTP