Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Перевод байтов в integer

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Krainov
Гость





СообщениеДобавлено: Вт Июл 01 2003 08:22    Заголовок сообщения: Перевод байтов в integer Ответить с цитатой

Пишется программа общения с весами ТЕНЗО-М.
По команде они возвращают вес в виде последовательности 4 байт в шестнацетеричном формате. Как это преобразовать в integer.
Хотелось бы видеть пример на делфи или с.
Вернуться к началу
grayrat



Зарегистрирован: 30.06.2003
Сообщения: 189

СообщениеДобавлено: Вт Июл 01 2003 12:55    Заголовок сообщения: Re: Перевод байтов в integer Ответить с цитатой

наверное, имелось в виду что в шестнадцатиричном видезначит не в символьном или BCD ? тогда примерно так:

union wieght
{
char byte[ 4 ];
long dw;
};

weight w;
w.byte[ ] = байт 0
w.byte[ 1 ] = байт 1
w.byte[ 2 ] = байт 2
w.byte[ 3 ] = байт 3

cout
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
chaka
Гость





СообщениеДобавлено: Вт Июл 01 2003 14:27    Заголовок сообщения: Re: Перевод байтов в integer Ответить с цитатой

Если последовательность из четырех байт занимает непрерывный участок в памяти (т.е. обычный байтовый массив из четырех элементов), то можно еще проще:
//--------------------------------------
unsigned char *buf; //weight[4]
unsigned int val = *(unsigned int*)buf;
//--------------------------------------
Это будет правильно работать только в том случае, если первый байт в последовательности содержит младшую часть числа
Вернуться к началу
grayrat



Зарегистрирован: 30.06.2003
Сообщения: 189

СообщениеДобавлено: Вт Июл 01 2003 17:23    Заголовок сообщения: Re: Перевод байтов в integer Ответить с цитатой

Только необходимо помнить что на 16-разрядной платформе int занмает 2 байта и нужно использовать long. Вообще, int можно использовать для счётчиков и для переменных максимальные значения которых известны за ранее и не > 2^16, а в структурах для передачи данных это потенциальный источник ошибок, которые всплывут при попытке прогнать код на другой (16-разрядной) платформе. А надобность в этом возникнет просто по закону подлости.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
chaka
Гость





СообщениеДобавлено: Вт Июл 01 2003 19:06    Заголовок сообщения: Re: Перевод байтов в integer Ответить с цитатой

А как на счет 64-разрядной платформы Smile, что там будет int, а что long. Я думаю что на 64-разядной платформе будет (если не брать во внимание типы long long или __int64) sizeof(long) > sizeof(int), так что поскольку 16-разрядные платформы сейчас довольно сильно устарели (а вот 64-разрядные очень актуальны), то все же int лучше, хотя это дело вкуса.
Вернуться к началу
grayrat



Зарегистрирован: 30.06.2003
Сообщения: 189

СообщениеДобавлено: Ср Июл 02 2003 10:45    Заголовок сообщения: Re: Перевод байтов в integer Ответить с цитатой

Размеры char, short и long опеделены в стандарте языка и от платформы не зависят. int же для каждой платформы такой чтобы обеспечить максимальную производительность на данной платформе. Он не предназначен для передачи таких данных как байт, слово, двойное слово, а скорее для "технических", вспомогательных целей, таких как счётчики, флаги и т.п., хотя можно гулять и по лезвию бритвы если не подпрыгивать высоко.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

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


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...