Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/69: Рейтинг темы: голосов - 69, средняя оценка - 4.64
 Аватар для prosto_lynx
49 / 25 / 2
Регистрация: 09.06.2008
Сообщений: 227

Как массив char[4] перевести в unsigned int?

06.04.2012, 21:33. Показов 15419. Ответов 57
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть массив из 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 не преобразовывая?..
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.04.2012, 21:33
Ответы с готовыми решениями:

Перевести long long unsigned int в массив char
Подскажите, пожалуйста, как превратить число типа long long unsigned int в массив символов? Каждый символ - цифра числа в 16-значной...

Надо перевести переменную типа unsigned char* в signed int и обратно
у меня есть переменная типа unsigned char*, мне нужно перевести ее в signed int , провести арифметические вычисления и затем перевести ее...

Как перевести массив int в массив char
Как перевести массив int в массив char нужна помощь

57
 Аватар для bugaboo
-1 / 4 / 0
Регистрация: 12.06.2017
Сообщений: 60
25.06.2017, 09:29
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от daun-autist Посмотреть сообщение
hoggy, то, что ответ с UB признан одним из лучших, по-моему недвусмысленно характеризует обитателей сего форума. Не так ли?
вы об этом?
Цитата Сообщение от bugaboo Посмотреть сообщение
C++
1
x += static_cast<T>(c) << (i << 3);
предполагается, что функция используется для чтения из файла чисел длиной в 2 и 4 байт. То есть, что в качестве 1-го аргумента она получает ссылку на unsigned int или unsigned short, которому присвоено значение 0. Конечно, она может не справиться с аргументами другого типа. Это и есть UB?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21286 / 8311 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
25.06.2017, 12:12
Цитата Сообщение от bugaboo Посмотреть сообщение
вы об этом?
Он о постах #2 и #3. В любом случае не стОит тратить время на троллей, ибо "жизнь слишком коротка, чтобы тратить время на общение с идиотами" (c)
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.06.2017, 14:30
Цитата Сообщение от bugaboo Посмотреть сообщение
вы об этом?
вероятно, он #2 и #19
C++
1
2
3
4
5
6
7
8
9
int main()
{
    char ch[4] = {'a', 'b', 'c', 'd'};
    
    int i = *reinterpret_cast<int*>(ch);
 
    (void)ch;
    (void)i;
}
Code
1
warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
чем это может грозить?
почитать об этом можно, например, вот здесь:
https://habrahabr.ru/post/114117/
0
Заблокирован
25.06.2017, 15:02
Цитата Сообщение от bugaboo Посмотреть сообщение
вы об этом?
Я об этом Как массив char[4] перевести в unsigned int?
0
 Аватар для bugaboo
-1 / 4 / 0
Регистрация: 12.06.2017
Сообщений: 60
27.06.2017, 20:08
Цитата Сообщение от daun-autist Посмотреть сообщение
Я об этом
Так этот вариант и не признан, поэтому и обсуждаем. Пока что оптимальным/универсальным признан такой вариант:
C++
1
2
3
4
5
6
7
8
9
10
template <typename T> void readx(T& x, ifstream& ifs)
{
    char c;
    x = 0;
    for (__int8 i = sizeof(T) - 1; i >= 0; i--)
    {
        if (!(ifs.get(c))) throw frex(ifs.rdstate(), "header length", x); //исключение на случай ошибки чтения файла
        x += static_cast<T>(c) << (i << 3);
    }
}
разумеется, с оговорками про 1-й аргумент функции. Но уверен, и тут найдется, к чему придраться
0
Заблокирован
27.06.2017, 20:22
Цитата Сообщение от bugaboo Посмотреть сообщение
Так этот вариант и не признан
Я так и понял.
Миниатюры
Как массив char[4] перевести в unsigned int?  
0
 Аватар для bugaboo
-1 / 4 / 0
Регистрация: 12.06.2017
Сообщений: 60
28.06.2017, 08:56
Цитата Сообщение от daun-autist Посмотреть сообщение
Я так и понял.
Ну и что? Трое лайкнули этот пост, значит для них UB не важно. Для меня - важно, поэтому я прицепился к варианту со сложением, критикуйте его, если желаете. А про те варианты уже всё написано.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
28.06.2017, 15:10
Из big-engian (сетевого порядка) источника можно преобразовать с помощью ntoh* функций.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21286 / 8311 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
28.06.2017, 15:23
Цитата Сообщение от Croessmah Посмотреть сообщение
Из big-engian (сетевого порядка)
А это является чем-то типа стандарта? Т.е. факт того, что "сетевой порядок" это тождественно "big endian", а потому функции ntoh* гарантированно переводят из big-endian'а в host-endian?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
28.06.2017, 15:34
Цитата Сообщение от Evg Посмотреть сообщение
А это является чем-то типа стандарта?
это входит в POSIX - https://ru.wikipedia.org/wiki/... 0.B8.D1.8F
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
28.06.2017, 15:40
Evg, да. Сетевой порядок байт - big-engian.
Конечно, собственные данные пользователь может отсылать как ему вздумается.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21286 / 8311 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
28.06.2017, 15:45
Да я не в этом смысле. Постфактум понятно, что оно просто обязано работать так, что на входе big endian, в противном случае всё бы развалилось. Но в спецификации этих функций написано, что они переводят из network-endian в host-endian. Мне вот интересно, где конкретно записано, что понятие "network endian" эквивалентно "big endian"?

Добавлено через 3 минуты
BSD'шные интерфейсы в этом смысле выглядят более логично спроектированными
https://linux.die.net/man/3/endian
они НЕ оперируют мифическим понятием "network endian", а явно используют понятия "little endian" и "big endian"

Кстати, как только появляются функции стандарта POSIX, то исходник становится формально непереносимым (в отличие от велосипедного варианта)
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
28.06.2017, 16:23
Цитата Сообщение от Evg Посмотреть сообщение
Мне вот интересно, где конкретно записано, что понятие "network endian" эквивалентно "big endian"?
По приведенной Вами ссылке есть:
These functions are similar to the older byteorder(3) family of functions. For example, be32toh() is identical to ntohl().
Ну и на википедии.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21286 / 8311 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
28.06.2017, 16:51
Дык я ж спрашиваю не про то, что пишут на заборах, а про то, что пишут в официальных стандартах. Это есть где-нибудь более-менее официально записанное понятие, или это просто на уровне договорённостей (т.е. все между собой договорились)?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
28.06.2017, 17:06
Ну например ISO/IEC 23360 Part 1:2008(E), раздел 13.3.21.1 Interfaces for Standard Library
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21286 / 8311 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
29.06.2017, 10:01
Цитата Сообщение от TRam_ Посмотреть сообщение
ISO/IEC 23360 Part 1:2008(E)
Это "Linux Standard Base". Т.е. опять только одна платформа

Я не то, чтоб придираюсь к интерфейсам hton*. Просто по случаю решил понять степень их стандартности, коль скоро речь зашла в контексте переносимости

Добавлено через 3 минуты
Точнее, степень стандартности понятия "network endian". Степень стандартности самих интерфейсов понятна (пост #50)
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
29.06.2017, 20:20
RFC 791 (описывает IPv4):
Similarly, whenever a multi-octet field represents a numeric quantity the left most bit of the whole field is the most significant bit. When a multi-octet quantity is transmitted the most significant octet is transmitted first.
Это же всё будет определяться конечным протоколом.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21286 / 8311 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
29.06.2017, 21:41
Ладно, забейте. Я не об этом спрашиваю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.06.2017, 21:41

Сделать преобразование unsigned char в char, а затем типу int
Здраствуйте, есть вопрос: Число представлено двумя полями: типа long для рублей и unsigned char - для копеек. Собственно что мне...

Перевести биты int в unsigned int
Доброго времени суток, как можно получить из int -&gt; unsigned int, т.е. где все биты в таком же порядке, по идее тогда будет без минуса. ...

Vector<unsigned char> в int
есть vector&lt;unsigned char&gt; размером 4 байта..и мне надо перевести их в 1 число типа int. т.е. типо int command = tempN.data(); но ...

Перевести Int в unsigned char в формате hex
Приветствую всех. Что-то тупняки с утра дикие, помогите пожалуйста сообразить как правильно сделать: Есть у меня пакет с данными...

Как перевести сишный unsigned int в явский int?
Кто-нибудь занимался подобным переводом кода? Поначалу я думал, что разницы вообще нет, просто есть знаковое представление и слегка...


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

Или воспользуйтесь поиском по форуму:
58
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru