Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2017, 23:06   #1
Анатолий666
Пользователь
 
Регистрация: 27.11.2014
Сообщений: 10
По умолчанию Число разбить на байты

Делаю устройство которое обменивается данными с компьютером через ком порт,но нужно передавать и принимать двухбайтовые числа.Посему, хочу сначала это число разбить на байты, передать побайтно через ком порт и потом обратно собрать их. Вроде бы простая операция,а сделать не могу.Например имеется двухбайтовое число 57864,оно хранится в переменной.Это число нужно разбить на байты и записать в две переменные типа Integer и эти две переменные собрать в одну,чтобы опять получить число 57864. Помогите кто чем может
Анатолий666 вне форума Ответить с цитированием
Старый 02.03.2017, 23:18   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Код:
union Buffer
{
    int     Integer;
    char    Packed[sizeof(Integer)];
};

Buffer data;
data.Integer = 12345;
SendToSerial(data.Packed, sizeof(data.Packed));

ReadFromSerial(data.Packed, szieof(data.Packed));
ProcessData(data.Integer);
waleri вне форума Ответить с цитированием
Старый 02.03.2017, 23:43   #3
Анатолий666
Пользователь
 
Регистрация: 27.11.2014
Сообщений: 10
По умолчанию

А есть еще варианты?
Анатолий666 вне форума Ответить с цитированием
Старый 02.03.2017, 23:44   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Вам шашечки или ехать?
waleri вне форума Ответить с цитированием
Старый 02.03.2017, 23:50   #5
Анатолий666
Пользователь
 
Регистрация: 27.11.2014
Сообщений: 10
По умолчанию

Я Вас понял)
Анатолий666 вне форума Ответить с цитированием
Старый 03.03.2017, 08:37   #6
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

waleri, для C++ это undefined behavior.

Цитата:
Сообщение от Анатолий666 Посмотреть сообщение
Посему, хочу сначала это число разбить на байты, передать побайтно через ком порт и потом обратно собрать их.
Не забудьте, что порядок байт на машинах может быть разный.
Croessmah вне форума Ответить с цитированием
Старый 03.03.2017, 09:13   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Ну тогда не следует забывать что размер int может быть разным...

Код:
char buffer[4];
buffer[0] = (value >> 24) & 0xFF;
buffer[1] = (value >> 16) & 0xFF;
buffer[2] = (value >>  8) & 0xFF;
buffer[3] = (value & 0xFF);
SendToSerial(buffer, 4);

ReadFromSerial(buffer, 4);
value = (buffer[0] << 24) | (buffer[1] << 16) || (buffer[2] << 8) | buffer[0];
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Число в формате ч:мм разбить на части Djeki Microsoft Office Excel 3 11.03.2012 17:25
[Pascal] символы\байты в число (IP в число) Alex11223 Помощь студентам 4 21.01.2012 01:12
Разбить число на части Surik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 23.02.2011 19:50
Разбить число на составляющие polpot Microsoft Office Access 2 21.01.2011 11:27
Как разбить число на цифрыКак разбить число на цифры: 3241 => 3,2,4,1 (Pascal) Banderas123 Помощь студентам 3 07.12.2009 18:26