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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
prosto_lynx
 Аватар для prosto_lynx
49 / 24 / 1
Регистрация: 09.06.2008
Сообщений: 225
06.04.2012, 21:33     Как массив char[4] в int ? #1
Есть массив из 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 не преобразовывая?..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sergey-K
 Аватар для 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
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
07.04.2012, 12:56     Как массив char[4] в int ? #4
При этом надо понимать, что код из поста 2 и код с union'ом из поста 3 будут работать только на little-endian машинах. Код из поста 2 надёжно будет работать только на машинах, в которых разрешены невыровненные обращения в память. Intel'овские процессоры удовлетворяют обоим критериям, а потому для "домашнего" использования или для программы, которая будет работать исключительно на Intel'е это канает, но в общем случае - нет
prosto_lynx
 Аватар для prosto_lynx
49 / 24 / 1
Регистрация: 09.06.2008
Сообщений: 225
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
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 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 ?
Ответ Создать тему
Опции темы

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