Форум программистов, компьютерный форум CyberForum.ru

Присвоить переменной типа int содержимое четырёх байт из массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Vtulhu
369 / 375 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
09.07.2013, 10:40     Присвоить переменной типа int содержимое четырёх байт из массива #1
Есть массив байт. Нужно выбрать из него четыре байта подряд (например, со второго по пятый) и вернуть как int.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2013, 10:40     Присвоить переменной типа int содержимое четырёх байт из массива
Посмотрите здесь:

Как присвоить такое значение переменной int C++
C++ Присвоить переменной char m значиние переменной int i..
Переменной d присвоить первую цифру после запятой некоторой переменной x типа float C++
МАССИВЫ: динамические мас.значение типа "int *" нельзя присвоить сущности типа "int" C++
C++ Значение переменной типа int
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
el_gato_de_Ch
35 / 35 / 1
Регистрация: 28.04.2013
Сообщений: 110
09.07.2013, 11:27     Присвоить переменной типа int содержимое четырёх байт из массива #2
попробуйте так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
char byte_arr[100];
 
int byte_arr_to_int()
{
  int r = 0;
  int beg = 2;
  int fin = 5;
  for(; beg<=fin; ++beg)
  {
    r |= byte_arr[beg];
    r <<= 8;
  }
  return r;
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
09.07.2013, 11:32     Присвоить переменной типа int содержимое четырёх байт из массива #3
C++
1
2
3
4
5
6
7
8
9
union bytes2int{
  int data;
  unsigned char bytes[4];
}trans;
int main(){
  for(int i=0; i<4; i++) std::cin>>trans.bytes[i];
  std::cout<<trans.data;
  return 0;
}
Убежденный
Системный программист
 Аватар для Убежденный
14175 / 6190 / 982
Регистрация: 02.05.2013
Сообщений: 10,306
Завершенные тесты: 1
09.07.2013, 11:36     Присвоить переменной типа int содержимое четырёх байт из массива #4
Цитата Сообщение от Vtulhu Посмотреть сообщение
Есть массив байт. Нужно выбрать из него четыре байта подряд (например, со второго по пятый) и вернуть как int.
Присвоить указателю на int адрес первого нужного байта в массиве.
Выставить ассерт "sizeof (int) == 4". Вспомнить про big endian / little endian.
el_gato_de_Ch
35 / 35 / 1
Регистрация: 28.04.2013
Сообщений: 110
09.07.2013, 11:40     Присвоить переменной типа int содержимое четырёх байт из массива #5
Kuzia domovenok, буквально недавно думал над тем, что никогда не пользовался union, спасибо за хороший пример
rlib
20 / 20 / 1
Регистрация: 01.05.2012
Сообщений: 60
09.07.2013, 11:41     Присвоить переменной типа int содержимое четырёх байт из массива #6
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#define BYTES_PER_INT 4
#define BITS_PER_BYTE 8
int form_int ( int *indexes, char *bytes ) {
    // indexes = pointer to array of indexes
    // bytes = pointer to bytes from which to form the integer
    int i, k, result = 0;
    for (i=0; i<BYTES_PER_INT; i++) {
        result |= bytes[indexes[i]] << i*BITS_PER_BYTE;
    }
    return result;
}
int main() {
    char bytes[8] = {0x1, 0x1, 0x1, 0x1, 0x5, 0x6, 0x7, 0x9};   
    int i, indexes[4] = {1,2,3,4};
    i = form_int( indexes, bytes );
    printf ("%d", i);
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2013, 11:49     Присвоить переменной типа int содержимое четырёх байт из массива
Еще ссылки по теме:

C++ Присвоить переменной Char значение третьего байта переменно типа Int
C++ Считать массив байт в переменную типа int в обратном порядке
C++ Ошибка: "Значение типа float нельзя присвоить сущности типа int"

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

Или воспользуйтесь поиском по форуму:
Discoverer
16 / 14 / 2
Регистрация: 05.07.2013
Сообщений: 27
09.07.2013, 11:49     Присвоить переменной типа int содержимое четырёх байт из массива #7
А такой вариант сойдет?
C++
1
2
3
int get_int(char* p, size_t pos) {
    return *reinterpret_cast<int*>(&p[pos]);
}
Подразумевается, что размер int - четыре байта.
Yandex
Объявления
09.07.2013, 11:49     Присвоить переменной типа int содержимое четырёх байт из массива
Ответ Создать тему
Опции темы

Текущее время: 12:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru