Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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-разрядной платформы , что там будет 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 же для каждой платформы такой чтобы обеспечить максимальную производительность на данной платформе. Он не предназначен для передачи таких данных как байт, слово, двойное слово, а скорее для "технических", вспомогательных целей, таких как счётчики, флаги и т.п., хотя можно гулять и по лезвию бритвы если не подпрыгивать высоко. |
|
Вернуться к началу |
|
|
|