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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 4 Байта и 3 типа как их подружить? Нужна помощь. 
V
    Опции темы
ivan219
  Дата 2.10.2007, 14:00 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Имею 4 Байта и знаю что эти 4 Байта имеют тип Byte, Integer, Single.
4 Байта стандартно а вот типы в разное время меняются соблюдение типов это моя забота вопрос в том каким образом эти 4 Байта попали в соответствующею переменную???
PM MAIL ICQ   Вверх
Rennigth
Дата 2.10.2007, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

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



ivan219, Прости пож-та конечно, но ты сам то понял что написал? Я нет... 


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
stab
Дата 2.10.2007, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



прямо детективная история smile предполагаю, что вы о преобразрвании типов..


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
ivan219
  Дата 2.10.2007, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Rennigth @  2.10.2007,  14:09 Найти цитируемый пост)
 Прости пож-та конечно, но ты сам то понял что написал?

Да ладно, я и сам незнаю как вопрос поставить знаю что нужно но незнаю как сказать.
Цитата(stab @  2.10.2007,  14:12 Найти цитируемый пост)
предполагаю, что вы о преобразрвании типов

Возможно.

Вобщем уменять есть 4 Байта данных пришедших с Com порта я их поместил в массив также я знаю что эти 4 Байта имеют определённый тип Byte, Integer, Single вот и возникла проблема как мне из этих 4 Байт получить переменную определёного типа с которой я буду дальше работать.
PM MAIL ICQ   Вверх
Alexeis
Дата 2.10.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Byte это 1 байт, а не четыре, а привести просто приведением 
Код

var
  p : Pointer;
  i  : Integer;
begin
  i := Integer(p^);



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
stab
Дата 2.10.2007, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



ага, понял. тогда вам нужно взять адрес первого байта и вытянуть лежащие там данные преобразуя их к нужному типу или просто работать с указателем:

Код

var
  data: array[0..3] of Byte;
  int: Integer;
  float: Single;
begin
  int := PInteger(@data[0])^;
  float := PSingle(@data[0])^;
end;


с байтом наверное вы и сами разберётесь.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Rennigth
Дата 2.10.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

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



ivan219, бр... Если у тебя 4ре байта так и сделай из них 4 переменные типа Byte ну или массив array of Byte.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
ivan219
  Дата 2.10.2007, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Alexeis @  2.10.2007,  14:27 Найти цитируемый пост)
Byte это 1 байт, а не четыре

Да это я знаю.
А вот как мне эти 4 Байта в:
Код

P: Pointer;

Загнать?
stab, спасибо.

Добавлено через 1 минуту и 39 секунд
Rennigth, они уменя в массиве но мнето надо дальше с ними работать с кажем вывести в Label
PM MAIL ICQ   Вверх
Alexeis
Дата 2.10.2007, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



ivan219, ну например ты знаешь что должно прийти 17 байт, лучше даже Pchar вместо Pointer юзать.

Код

var
  P : PChar;
  a : Integer;
Begin
  GetMem(p, 17);
  ReciveData(p, 17);
  a := Integer((p + offset)^);

offset - смещение, например если нужно в переменной получить значение не с первого байта адреса, а на например с 4го.

Добавлено через 2 минуты и 34 секунды
Елки, а вообще грамотнее писать в TMemoryStream, а оттуда уже читать в любую переменную, начиная с любого смещения.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ivan219
  Дата 2.10.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



stab, твой пример выдаёт ошибку (Constant expression violates subrange bounds)
на строках:
Код

 int := PInteger(@data[0])^;
 float := PSingle(@data[0])^;

Alexeis, 
Код

ReciveData(p, 17);

компилятор ругается говорит незнаю такой команды smile
PM MAIL ICQ   Вверх
Alexeis
Дата 2.10.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



 так это твоя функция получения данных с компорта. 
    
Recive - получить Data - данные


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ivan219
  Дата 2.10.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Постепенно всё проесняется smile
PM MAIL ICQ   Вверх
stab
Дата 2.10.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



Цитата(ivan219 @  2.10.2007,  18:52 Найти цитируемый пост)
stab, твой пример выдаёт ошибку (Constant expression violates subrange bounds)

значит массив у тебя как-то не так объявлен.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
ivan219
  Дата 2.10.2007, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(stab @  2.10.2007,  15:20 Найти цитируемый пост)
значит массив у тебя как-то не так объявлен.

 smile это точно [1..4] smile 
Alexeis, если я делаю так:
Код

DatSingle := Single(P^);

то получаю (Invalid typecast) а с другими типами Byte, Integer всё нормально было smile

Добавлено через 6 минут
А вот так вроде работает:
Код

DatSingle := Single(P);

PM MAIL ICQ   Вверх
Alexeis
Дата 2.10.2007, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Ну если объявил как PChar, то тогда так
Код

var
  p : PChar;
  s : Single;
begin
  s := PSingle(p)^;



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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