Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум программистов _ Общие вопросы по С и С++ _ указатели

Автор: Т&K 12:04:2008, 13:09

Помогите, кто чем может.. Совсем запуталась: написала прогу для передачи информации между радиоконтроллерами, вроде даже работает.НО!!! Перед отправкой информация складывается в массив, снала передается размер, потом сам массив функцией write. На стадии отправления все шоколадно, но вот когда принимающая сторона получает массив(read), то появлябтся знаки ##, очевидно проблема с указателями. Может кто посмотрит? sad.gif
Пимичание: все типы, даже char занимают 2 байта!!! Просто компилятор такой тут! Функциивсе написаны, как меня уверяли разработчики, для работы со словами.

 __________________.txt ( 2.79 килобайт ) : 18
 

Автор: biz 15:04:2008, 08:48

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

да и вообще глядя на этот кусок кода трудно сказать что-то вразумительное.......

Автор: Т&K 15:04:2008, 09:29

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

Автор: biz 16:04:2008, 10:07

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

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

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

!!!!!!!!!

Автор: gamecreator 16:04:2008, 11:48

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

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

Автор: biz 16:04:2008, 12:49

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

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


че не эквивалентно? какому выражению?? что ты вообще имеешь в виду???

Автор: Yason 16:04:2008, 13:06

Т&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);

Автор: gamecreator 19:04:2008, 08:15

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

memcpy( &(buf[offset_common]), &ADDR2, 1 );
не эквивалентно
buf[offset_common] = ADDR2;

Автор: Т&K 19:04:2008, 12:25

Спасибо всем за комментарии, за помощь. Проблема решена! Всем спасибо!!!

Автор: Yason 19:04:2008, 13:18

Т&K
Если не секрет, в чём была проблема?

Автор: biz 21:04:2008, 03:51

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


объясни пожалуйста в чем разница!

Форум Invision Power Board (http://nulled.ws)
© Invision Power Services (http://nulled.ws)