Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.054 c
2-1201302467
altatr
2008-01-26 02:07
2008.02.17
Memo - запись в одну строку


1-1194198435
Slim
2007-11-04 20:47
2008.02.17
DBLookupComboboxEh1


2-1201170599
Res
2008-01-24 13:29
2008.02.17
Файл


15-1196174198
TIF
2007-11-27 17:36
2008.02.17
Чего желаете?


2-1201179793
Darvin
2008-01-24 16:03
2008.02.17
Как сделать окно fsStayOnTop только для своего приложения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский