Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/35: Рейтинг темы: голосов - 35, средняя оценка - 4.54
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910

Как получить из двух byte один int?

16.08.2016, 08:30. Показов 8358. Ответов 55
Метки нет (Все метки)

Собственно вот, есть две переменные byte
C++
1
2
byte b1 = 0x03;
byte b2 = 0x40;
надо получить одну типа int, но чтобы b1 был старшим байтом, а b2 младшим. Выглядеть будет примерно так:
C++
1
2
3
4
byte b1 = 0x03;
byte b2 = 0x40;
 
int i1 = 0x0340; // 0x03 + 0x40
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.08.2016, 08:30
Ответы с готовыми решениями:

Как из типа данных BYTE получить int и вывести в консоль, GetRValue(color)
Добрый день ! Я хочу вывести в консоль значения красного, зеленого и синего для пикселя. Но при таком выводе у меня выводятся иероглифы,...

Как заполнить один int пустой массив другим int массивом ?
Можно пример кода :)

Как записать и прочитать int (4 byte) из char[]
Buffer.h #ifndef BUFFER_CPP_H #define BUFFER_CPP_H #include <vector> template <class T> class Buffer { ...

55
Эксперт .NET
 Аватар для Rius
13342 / 7795 / 1692
Регистрация: 25.05.2015
Сообщений: 23,724
Записей в блоге: 14
16.08.2016, 14:23
Цитата Сообщение от HighPredator Посмотреть сообщение
А вот этот анализатор... Ну мы все поняли
Это анализатор в компиляторе TI. Но решения во всём интернете не видится.

Цитата Сообщение от HighPredator Посмотреть сообщение
Кстати, а как мы в С++ оказались?
->
Цитата Сообщение от yurickas Посмотреть сообщение
надо получить одну типа int, но чтобы b1 был старшим байтом, а b2 младшим. Выглядеть будет примерно так:
Похожий вопрос по преобразованию массива байт в другой тип.
0
 Аватар для Babysitter
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
16.08.2016, 14:25
Цитата Сообщение от Rius Посмотреть сообщение
Я ответ так и не нашёл.
а где взять такой компилятор злой?
вот такой код не компилируется даже?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdint.h>
#include <string.h>
 
#define float32_t float
 
union
{
    float32_t float_value;
    uint8_t array[4];
} f;
 
 
int main()
{
    uint8_t array[4] = { 0u, 0u, 0u, 0u };
    memcpy(f.array, array, sizeof(array));
    printf("%f\n", f.float_value);
}
http://rextester.com/YNIJ61452
0
Эксперт .NET
 Аватар для Rius
13342 / 7795 / 1692
Регистрация: 25.05.2015
Сообщений: 23,724
Записей в блоге: 14
16.08.2016, 14:28
C
1
2
3
4
5
union
{
    float32_t float_value;
    uint8_t array[4];
} f;
#1424-D (MISRA-C:2004 18.4/R) Unions shall not be used

Цитата Сообщение от Babysitter Посмотреть сообщение
а где взять такой компилятор злой?
Code Composer Studio, MSP430, компилятор TI v15.12.1.LTS
1
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
16.08.2016, 14:30
Rius, а вы можете переключить анализатор на более позднюю версию стандарта мисры? 2012 к примеру.
0
Эксперт .NET
 Аватар для Rius
13342 / 7795 / 1692
Регистрация: 25.05.2015
Сообщений: 23,724
Записей в блоге: 14
16.08.2016, 14:34
Не нашёл такой возможности. Похоже гвоздями прибито.
0
16.08.2016, 14:43

Не по теме:

Цитата Сообщение от Rius Посмотреть сообщение
При полном соответствии с ними число неожиданных ошибок будет меньше.
жесть какая

похоже они просто кричат нам, что такая задача вообще не должна появляться перед нами, потому как решить ее оставшись в пределах этого адского стандарта невозможно. нужно смотреть, как к нам вообще попадает это число в разобраном виде, может так и не должно быть?

может можно загнать в uint32_t, а потом попробовать битовыми операциями поковырять?

0
16.08.2016, 15:21

Не по теме:

Babysitter, в той области, где возник этот стандарт, лучше перебдеть.
С битами из uint32_t ещё больше шанс ошибку закодить.

0
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,468
16.08.2016, 15:32
Цитата Сообщение от Rius Посмотреть сообщение
С битами из uint32_t ещё больше шанс ошибку закодить
но похоже нас именно к этому и толкают))
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
16.08.2016, 16:34
Цитата Сообщение от Babysitter Посмотреть сообщение
adaptor.bytes.b1 = 0x03;
adaptor.bytes.b2 = 0x40;
int i1 = adaptor.word;
это же UB не?
1
 Аватар для Babysitter
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
16.08.2016, 19:47
Цитата Сообщение от Raali Посмотреть сообщение
это же UB не?
почитаю вечерком стандарт, если таки да, то это предательство со стороны плюсов
в чистом си можно было, тут зависит вроде от времени жизни как-то. напишу точнее потом
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
16.08.2016, 20:38
Цитата Сообщение от Rius Посмотреть сообщение
i1 = 256 * b1 + b2;
Да, конечно... Попутал слегка...
0
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
17.08.2016, 20:31  [ТС]
Ладно, следующая проблема:

имеем адрес в памяти, например 0x004532.

Как представить это число в byte, чтобы:
C++
1
2
3
byte HighByte = 0x00;
byte MiddleByte = 0x45;
byte LowByte = 0x32;
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
17.08.2016, 20:40
yurickas,
C++
1
2
3
    uint8_t HighByte = (addr >> 16) & 0xFF;
    uint8_t MiddleByte = (addr >> 8) & 0xFF;
    uint8_t LowByte = (addr) & 0xFF;
addr предварительно преобразовать в целое число подходящей разрядности.
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
17.08.2016, 20:44
Если этот адрес (числовое значение) записано в переменную, то определяем (или на основе сакрального знания хардкодим) порядок хранения байт (endianness), и в соответствии с ним и размером переменной в которой хранится адрес, выдираем байты, откастовав адрес к указателю на беззнаковый чар. Принцип и подсказка здесь: Функция is_little_endian
0
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
18.08.2016, 07:15  [ТС]
Там фокус в чем. Пишу программу для диагностики авто. Есть функция чтения прошивки ЭБУ. Формируется пакет данных по байтам. В пакете байт команды и байты параметров команды. Так вот, в параметрах команды идут 4 байта. Первые 3 - это адрес в памяти ЭБУ с которого я хочу считать данные. Представлены они как написал выше. Четвертый - сколько байт хочу считать.
Так вот, чтобы хардкорить надо иметь число с размерностью 3 байта, а потом его уже разбивать на байты.


Ну, это так, на будущее. Сейчас написал рабочую библиотеку на плюсах, ибо на шарпе было много проблем с маршалингом. Сейчас надо пробовать написать ее на CLI чтобы дальше работать с шарпом.
0
Эксперт .NET
 Аватар для Rius
13342 / 7795 / 1692
Регистрация: 25.05.2015
Сообщений: 23,724
Записей в блоге: 14
18.08.2016, 07:17
Цитата Сообщение от yurickas Посмотреть сообщение
надо иметь число с размерностью 3 байта, а потом его уже разбивать на байты.
Не надо. Uint32 тоже подойдёт. Старший байт держать равным 0.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.08.2016, 07:17

Как получить int из массива byte
Добрый день! Есть массив байт byte bytes = {0,0,0,1}. Как известно, int (Int32) состоит из 4х байт. Как этот массив можно преобразовать...

Варианты конвертации bool/byte/int в byte/int
В Си, если мне не изменяет память можно наоборот любые данные интерпретировать как true/false. А вот меня интересует преобразование...

Как переконвертировать int в byte[]?
Как переконвертировать hex занчение int в byte? Чтобы int a = 0x45C5; cтало byte b = new byte {0x45, 0xC5}; udp: и наоборот тоже

Что делает Read(byte[] buffer, int offset, int count) метод класса Stream
Что делает Read(byte buffer, int offset, int count) метод класса Stream. Приведите пример использования данного метода. Спасибо!

Dictionary<int, int> получить наибольшее значение value (втрого int)
Dictionary&lt;int, int&gt; bet = new Dictionary&lt;int, int&gt;; bet.Add(1,20); bet.Add(2,50); int i = // сюда нужно записать большее значение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
56
Ответ Создать тему
Новые блоги и статьи
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2. Задача: контроль уникальности строк в. . .
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
24 Мат модель здравосохранения: функциональные требования к строительству пищеблока
anaschu 18.06.2026
СРесурсами1: финансовый SD-контур, калькулятор функциональных требований пищеблока Сегодня разделили затраты в агенте Экономика по образцу модели НАСОСЫ, добавили расчёт ROI и построили первый. . .
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов • Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp • Смежный проект:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru