Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Vtulhu
371 / 377 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
#1

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

09.07.2013, 10:40. Просмотров 1353. Ответов 6
Метки нет (Все метки)

Есть массив байт. Нужно выбрать из него четыре байта подряд (например, со второго по пятый) и вернуть как int.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2013, 10:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Присвоить переменной типа int содержимое четырёх байт из массива (C++):

Присвоить переменной Char значение третьего байта переменно типа Int - C++
всем привет, на одном собеседовании передо мной поставили следующую задачу, присвоить переменной char ch, значение третьего байта переменно...

Значение типа "int*" нельзя присвоить сущности типа int - C++
#include <iostream> using namespace std; int sort(int k, int p, int b, int n) { int min = 0; // для вставки задач int sum;...

МАССИВЫ: динамические мас.значение типа "int *" нельзя присвоить сущности типа "int" - C++
МАССИВЫ: динамические массива ОШИБКА:значение типа "int *" нельзя присвоить сущности типа "int" #include <iostream> using...

Присвоить переменной char m значиние переменной int i.. - C++
Как присвоить переменной char m значиние переменной int i таким образом ? int main() { char m; int i = 5; m = i; # ( что бы...

Переменной d присвоить первую цифру после запятой некоторой переменной x типа float - C++
Нужно целой переменной d присвоить первую цыфру после комы некоторой переменной x типа float Скажите, пожалуйста, с чего начать и по...

Записать адрес переменной произвольного типа в переменную типа int - C++
Здравствуйте, есть структура __packed struct myStruct{ uint32 HisCh; uint32 sNo; uint16 tNo; uint32 reserv; };

6
el_gato_de_Ch
35 / 35 / 1
Регистрация: 28.04.2013
Сообщений: 110
09.07.2013, 11:27 #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;
}
0
Kuzia domovenok
2043 / 1888 / 172
Регистрация: 25.03.2012
Сообщений: 6,502
Записей в блоге: 1
09.07.2013, 11:32 #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;
}
2
Убежденный
Ушел с форума
Эксперт С++
15708 / 7218 / 1139
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
09.07.2013, 11:36 #4
Цитата Сообщение от Vtulhu Посмотреть сообщение
Есть массив байт. Нужно выбрать из него четыре байта подряд (например, со второго по пятый) и вернуть как int.
Присвоить указателю на int адрес первого нужного байта в массиве.
Выставить ассерт "sizeof (int) == 4". Вспомнить про big endian / little endian.
1
el_gato_de_Ch
35 / 35 / 1
Регистрация: 28.04.2013
Сообщений: 110
09.07.2013, 11:40 #5
Kuzia domovenok, буквально недавно думал над тем, что никогда не пользовался union, спасибо за хороший пример
0
rlib
20 / 20 / 1
Регистрация: 01.05.2012
Сообщений: 60
09.07.2013, 11:41 #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;
}
0
Discoverer
16 / 14 / 2
Регистрация: 05.07.2013
Сообщений: 27
09.07.2013, 11:49 #7
А такой вариант сойдет?
C++
1
2
3
int get_int(char* p, size_t pos) {
    return *reinterpret_cast<int*>(&p[pos]);
}
Подразумевается, что размер int - четыре байта.
0
09.07.2013, 11:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2013, 11:49
Привет! Вот еще темы с ответами:

Считать массив байт в переменную типа int в обратном порядке - C++
Есть массив байт: char byData = {0x87, 0xd6, 0x12, 0x00}; Нужно считать его в переменную типа int в обратном порядке, т.е. должно...

Ошибка: "Значение типа float нельзя присвоить сущности типа int" - C++
При компиляции в Visual C++ получается такая ошибка: &quot;Значение типа float нельзя присвоить сущности типа int&quot;. Восьмая строка #include...

Как присвоить такое значение переменной int - C++
есть две переменные типа int int x=2; int y=3; я хочу чтобы третья переменная Z(тоже тип int) имело значение 23, то есть...

Присвоить значение наименьшего элемента массива переменной М1, номер строки, где находится этот элемент, - переменной Т, номер столбца - переменной С - C++
Массив С действительных чисел имеет 5 строк и 11 столбцов. Присвоить значение наименьшего элемента массива переменной М1, номер строки, где...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.