Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразовать массив байтов в структуру, Массив байтов в строгую структуру 
V
    Опции темы
Hukuma
Дата 24.2.2009, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 18.2.2009

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



Здравствуйте!Помогите пожалуйста решить следующую задачу.
Имеется таблица на Paradox-е,в таблице есть поле типа Bytes.В этом поле хранятся нужные нам данные.Есть документ,в котором расписано как расположены эти данные. Например

0-ой байт - длина всего поля
1-17 байт некоторая строка
17-21 - число типа float
21-25 - число типа float

числа типа float представляются в формате IEEE,т.е. порядок,мантисса...вот ссылка в Википедии
http://ru.wikipedia.org/wiki/%D0%A7%D0%B8%...%81%D1%82%D0%B8

еще имеется функция,в которую нужно передать этот массив данных,однако начинать нужно не с 0го байта массива байтов,а с 17го.
Я пока сделал следующее: выделили буффер 
Код


void *Buffer=malloc(150); // выделил буфер памяти
   memset(Buffer,0,sizeof(Buffer)); // заполнил его нулями
   Form1->Query1->FieldByName("Info")->GetData(Buffer); // заполнил массиво байтов из поля таблиця Info

   for(int j=0;j<17;j++)  // сдвинул указатель на 17 байтов.
    ((char*)Buffer)++;


теперь о функции,в которую нужно это передать.Эта функция хранится в библиотеке DLL,я подключил ее. и теперь я не совсем уверен как нужно передать массив байтов в нее. Я пытался передать указатель Buffer в нее,но в этом случае возникает ошибка Access violation.
Я поговорил с человеком,который написал функцию - он советует завести структуру примерно такую и затем уже передать в функцию эту структуру по адресу.

Код


Struct MyStruct
{
   float Par1;
   float Par2;
   ....
};




т.е. поля структуру по байтам соответствуют данным в массиве байтов. Т.е. байты 17-21 это число типа float,ему в структуре соответствует
поле Par1. Байты 21-25 это число типа float.Ему в структуре соответствует поле структуры Par2. И теперь вопрос.Можно ли передать массив байтов,на который указывает указатель void * Buffer в эту структуру? И если да,то подскажите пожалуйста как это сделать...


PM MAIL   Вверх
Artemon
Дата 24.2.2009, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20



Код

struct SStruct
{
int a;
int b;
};

SStruct S;
S.a = 1;
S.b = 2;

char* buf = new char[ sizeof(SStruct) ];

memcpy(buf, (char*)&S);


!!!!только не забудь в настройках компилятра выставить выравнивание в 1 байт!!!!


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Hukuma
Дата 24.2.2009, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 18.2.2009

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



Спасибо большое!  smile Все,вопрос решен smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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