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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
prosto_lynx
49 / 24 / 1
Регистрация: 09.06.2008
Сообщений: 226
#1

Как массив char[4] в int ? - C++

06.04.2012, 21:33. Просмотров 1910. Ответов 5
Метки нет (Все метки)

Есть массив из 4х char символов (4-е байта), нужно его перевести в unsigned int.
Я сделал втупую:
C++
1
2
3
4
5
6
7
        unsigned int B=0;
        long Ex = 256 * 256 * 256;
        for (int i=0; i<4; i++)
        {
                B8 += t[i] * Ex;
                Ex /= 256;
         }
Можно ли это как-то упростить?.. а то уж слишком некрасиво, долго и программу засоряет...

Я мыслю так, т.к. обе переменные (и 4-е char'a, и int) 4-х байтовые, то появилось предположение, что можно, как-нибудь, например, обратиться к char-массиву, сразу записав его в переменную int не преобразовывая?..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2012, 21:33     Как массив char[4] в int ?
Посмотрите здесь:

Перевод int в символьный массив char C++
дан массив char[22] как превратить отдельные байты в int, short C++
первод массива char в массив int ( в чем ошибка?????) C++
C++ Как превести из char* в int и наоборот из int в char*?
C++ Массив int из char
C++ Перевод char массива в int массив
C++ Массив char + перевод в int
C++ Массив. Char в Int
C++ Как в выделенную память записать поочередно число int, массив char[n], и еще число int
C++ Как преобразовать строку char в массив int?
C++ Форматирование строк, char to int & int to char
Как переделать динамический массив int в char? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sergey-K
233 / 224 / 13
Регистрация: 27.10.2011
Сообщений: 249
06.04.2012, 21:52     Как массив char[4] в int ? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
char ch[4] = {'a', 'b', 'c', 'd'};
int i = *(int *)ch;
George22
12 / 10 / 1
Регистрация: 04.04.2012
Сообщений: 29
07.04.2012, 10:26     Как массив char[4] в int ? #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Sergey-K красиво!

C++
1
2
3
4
5
 char t[4] ={0x04,0x03,0x02,0x01};
 int ex=0;
 
 for(int i=0;i<4;i++)
 ex+=(int)t[i]<<(i<<3);
Добавлено через 12 часов 30 минут
И еще:
C++
1
2
3
4
5
union
{
char t[4];
int i;
} number = {'a','b','c','d'};
Evg
Эксперт CАвтор FAQ
17381 / 5619 / 350
Регистрация: 30.03.2009
Сообщений: 15,398
Записей в блоге: 26
07.04.2012, 12:56     Как массив char[4] в int ? #4
При этом надо понимать, что код из поста 2 и код с union'ом из поста 3 будут работать только на little-endian машинах. Код из поста 2 надёжно будет работать только на машинах, в которых разрешены невыровненные обращения в память. Intel'овские процессоры удовлетворяют обоим критериям, а потому для "домашнего" использования или для программы, которая будет работать исключительно на Intel'е это канает, но в общем случае - нет
prosto_lynx
49 / 24 / 1
Регистрация: 09.06.2008
Сообщений: 226
09.04.2012, 11:52  [ТС]     Как массив char[4] в int ? #5
Цитата Сообщение от Evg Посмотреть сообщение
При этом надо понимать, что код из поста 2 и код с union'ом из поста 3 будут работать только на little-endian машинах. Код из поста 2 надёжно будет работать только на машинах, в которых разрешены невыровненные обращения в память. Intel'овские процессоры удовлетворяют обоим критериям, а потому для "домашнего" использования или для программы, которая будет работать исключительно на Intel'е это канает, но в общем случае - нет
Спасибо, для меня этот вопрос важен.
Я так понял, что little-endian используется не только на интеловских процессорах, а вообще на архитектуре 86?
p.s. Тогда, правильно ли я понимаю, что код из поста 2 всегда будет работать, если прога запущена из-под XP? (Запуск эмулятора XP я не рассматриваю).
Evg
Эксперт CАвтор FAQ
17381 / 5619 / 350
Регистрация: 30.03.2009
Сообщений: 15,398
Записей в блоге: 26
09.04.2012, 12:40     Как массив char[4] в int ? #6
Цитата Сообщение от prosto_lynx Посмотреть сообщение
Я так понял, что little-endian используется не только на интеловских процессорах, а вообще на архитектуре 86?
Словом "Intel" я называл архитектуру процессора. Т.е. это все процессоры x86, x64_64, не важно кем произведённые (Intel'ом, AMD, может кто-то ещё выпускает)

Цитата Сообщение от prosto_lynx Посмотреть сообщение
p.s. Тогда, правильно ли я понимаю, что код из поста 2 всегда будет работать, если прога запущена из-под XP? (Запуск эмулятора XP я не рассматриваю).
Да. Причём независимо от того, реальная это машина или эмулятор.
Yandex
Объявления
09.04.2012, 12:40     Как массив char[4] в int ?
Ответ Создать тему
Опции темы

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