Форум программистов CODEBY.NET Хостинг в Беларуси — Active Technologies

Разработка бизнес сайтов

Нужны клиенты? Тогда сюда быстрее...
X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )




> указатели, работа с массивами и указателями
Т&K
Вставить ник
сообщение 12:04:2008, 13:09
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 6
Регистрация: 25:03:2006
Пользователь №: 3 151



Репутация: - 0 +


Помогите, кто чем может.. Совсем запуталась: написала прогу для передачи информации между радиоконтроллерами, вроде даже работает.НО!!! Перед отправкой информация складывается в массив, снала передается размер, потом сам массив функцией write. На стадии отправления все шоколадно, но вот когда принимающая сторона получает массив(read), то появлябтся знаки ##, очевидно проблема с указателями. Может кто посмотрит? sad.gif
Пимичание: все типы, даже char занимают 2 байта!!! Просто компилятор такой тут! Функциивсе написаны, как меня уверяли разработчики, для работы со словами.
Прикрепленные файлы
Прикрепленный файл  __________________.txt ( 2.79 килобайт ) Кол-во скачиваний: 18
 
Подняться вверх 
 
Сообщение #1
 
Новая тема 
Ответов (1 - 10)
biz
Вставить ник
сообщение 15:04:2008, 08:48
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 45
Регистрация: 15:04:2008
Пользователь №: 16 634



Репутация: - 0 +


sizeof( int ) == 1 !!???

да и вообще глядя на этот кусок кода трудно сказать что-то вразумительное.......
Подняться вверх 
 
Сообщение #2
Т&K
Вставить ник
сообщение 15:04:2008, 09:29
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 6
Регистрация: 25:03:2006
Пользователь №: 3 151



Репутация: - 0 +


Я же писала 2 байта!!! Все типы 2 байта! rolleyes.gif Библиотечные функции работают со словами, адресация словная!

Сообщение отредактировал Т&K - 15:04:2008, 09:32
Подняться вверх 
 
Сообщение #3
biz
Вставить ник
сообщение 16:04:2008, 10:07
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 45
Регистрация: 15:04:2008
Пользователь №: 16 634



Репутация: - 0 +


memcpy( &(buf[offset_common]), &ADDR2, 1 ); --- функция копирует словами!???

а почему бы тогда тебе не поменять все типы на один какой-нить конкретный, например "int" !!??

и не лучше ли будет записать вышеупомянутое выражение как:
buf[offset_common] = ADDR2;

!!!!!!!!!

Сообщение отредактировал biz - 16:04:2008, 10:09
Подняться вверх 
 
Сообщение #4
gamecreator
Вставить ник
сообщение 16:04:2008, 11:48
Цитата Ответить 


Гуру
***

Группа: Достойный программист
Сообщений: 315
Регистрация: 3:11:2007
Пользователь №: 13 517



Репутация: - 1 +


Цитата(biz @ 16:04:2008, 12:07 ) *
и не лучше ли будет записать вышеупомянутое выражение как:
buf[offset_common] = ADDR2;

оно не эквивалентно тому выражению
Подняться вверх 
 
Сообщение #5
biz
Вставить ник
сообщение 16:04:2008, 12:49
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 45
Регистрация: 15:04:2008
Пользователь №: 16 634



Репутация: - 0 +


Цитата(gamecreator @ 16:04:2008 - 14:48) *
Цитата(biz @ 16:04:2008, 12:07 )
и не лучше ли будет записать вышеупомянутое выражение как:
buf[offset_common] = ADDR2;

оно не эквивалентно тому выражению


че не эквивалентно? какому выражению?? что ты вообще имеешь в виду???
Подняться вверх 
 
Сообщение #6
Yason
Вставить ник
сообщение 16:04:2008, 13:06
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 135
Регистрация: 27:02:2004
Пользователь №: 296



Репутация: - 6 +


Т&K
Я промоделировал вашу задачу в C++Builder'е, всё работает нормально. Значит, дело не в указателях.

Следовательно, встречный вопрос: "появляются знаки ##" - всегда ли появляются? где появляются (во всём массиве, в опредлённых его местах, или случайно)?
Быть может, дело в помехах радиоканала? Наверяка CRC предусмотрена как раз на этот случай.

Код
    char addr2 = 1;
    char buf[20];
    char data[6] = "Hello";
    char offset=sizeof(data);
    char offset_common = 0;

    memcpy(&buf[offset_common], &addr2, 1);
    offset_common += 1;
    memcpy(&buf[offset_common], data, offset);
    offset_common += offset;

    //Эмуляция передачи :)
    TMemoryStream* ms = new TMemoryStream();
    ms->Write(&offset_common, 1);
    ms->Write(buf, offset_common);
    ms->Seek(0, soFromBeginning);

    char readBuf[20];
    char readSize;
    ms->Read(&readSize,1);
    ms->Read(readBuf, readSize);
Подняться вверх 
 
Сообщение #7
gamecreator
Вставить ник
сообщение 19:04:2008, 08:15
Цитата Ответить 


Гуру
***

Группа: Достойный программист
Сообщений: 315
Регистрация: 3:11:2007
Пользователь №: 13 517



Репутация: - 1 +


Цитата(biz @ 16:04:2008, 14:49 ) *
че не эквивалентно? какому выражению?? что ты вообще имеешь в виду???

memcpy( &(buf[offset_common]), &ADDR2, 1 );
не эквивалентно
buf[offset_common] = ADDR2;
Подняться вверх 
 
Сообщение #8
Т&K
Вставить ник
сообщение 19:04:2008, 12:25
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 6
Регистрация: 25:03:2006
Пользователь №: 3 151



Репутация: - 0 +


Спасибо всем за комментарии, за помощь. Проблема решена! Всем спасибо!!!
Подняться вверх 
 
Сообщение #9
Yason
Вставить ник
сообщение 19:04:2008, 13:18
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 135
Регистрация: 27:02:2004
Пользователь №: 296



Репутация: - 6 +


Т&K
Если не секрет, в чём была проблема?
Подняться вверх 
 
Сообщение #10
biz
Вставить ник
сообщение 21:04:2008, 03:51
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 45
Регистрация: 15:04:2008
Пользователь №: 16 634



Репутация: - 0 +


Цитата(gamecreator @ 19:04:2008 - 11:15) *
memcpy( &(buf[offset_common]), &ADDR2, 1 );
не эквивалентно
buf[offset_common] = ADDR2;


объясни пожалуйста в чем разница!
Подняться вверх 
 
Сообщение #11


Быстрый ответ  Ответить  Новая тема 

> Быстрый ответ
Полужирный
Курсив
Подчеркнутый
Вставить изображение
Смайлики
Цитата
Код
 
 Отправлять уведомления об ответах на e-mail |  Включить смайлики |  Добавить подпись
   

 

RSS Текстовая версия Сейчас: 20:07:2008 - 22:24
с нами можно связаться по:
телефону: +375-(29)-632-60-67
e-mail:info@codeby.net