Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/104: Рейтинг темы: голосов - 104, средняя оценка - 5.00
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335

uint32, size_t и подобные им

01.09.2013, 10:53. Показов 21394. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно, в чем смысл данных типов, в отличие от обычных unsigned int, int и подобных им?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.09.2013, 10:53
Ответы с готовыми решениями:

Беззнаковый тип size_t: чем различие между size_t, uintptr_t, ptrdiff_t и intptr_t?
В чем вообще его смысл? Разве запись double a = {1,2,3}; int i = 1; *(a+i)+=1; значит, что мы перепрыгивам вперед по...

uint32 и UINT64
Господа, не подскажете ли, какие магические слова надо написать, чтобы начать использовать тип uint32? Мне не важно, как он называется...

Преобразование массива к uint32
Есть задание: создать массив случайных чисел (от -100 до 100) A, сделать массив B1 из A такой, чтобы был тип uint, сделать с помощью...

41
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
01.09.2013, 10:59
Использование memsize типов (таких как size_t, ptrdiff_t, INT_PTR) в 64-битных программах, вместо 32-битных типов (int, unsigned) позволяет:
  1. Построить компилятору более простой и, следовательно, более быстрый код, в котором будут отсутствовать лишние преобразования 32-битных и 64-битных данных. Особенно это полезно при работе с адресной арифметикой и индексации массивов.
  2. Избежать ряда ошибок при обработке большого объема входных данных, когда количество обрабатываемых элементов превышает количество UINT_MAX.
  3. Избежать ряда других, более специфичных ошибок.
  4. Сделать код более переносимым между 64-битными Windows и Linux системами, в которых используются различные модели данных. Так, например, в Linux системах для индексации больших массивов можно использовать тип unsigned long, а в Windows нет.
как то так )

Добавлено через 3 минуты
http://www.viva64.com/ru/a/0050/
1
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
01.09.2013, 12:50
Например, переносимость. Если использовать, например, unsigned int вместо size_t, программа будет работать только на 32разрядных системах! Например, придётся писать отдельную программу для 64х разрядных, например.
...например.
1
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
01.09.2013, 12:57
uint32 - это тип фиксированного размера (32-бита). Иметь такие типы иногда очень желательно.
Например, вы передаете данные по сети и хотите быть уверенными, что на другой стороне
их тоже прочитают правильно. Независимо от версии компилятора и разрядности ОС.

А размер size_t (также, как и ptrdiff_t) варьируется, в зависимости от архитектуры.
На x86 size_t равен 4 байтам, а на x64 - уже восьми. Это помогает поддерживать
работу с объемами памяти соответствующего размера. Кроме того, название size_t
более описательно, чем int: видя функцию, которая возвращает size_t, сразу
становится понятно, что возвращается какой-то размер, а не просто число.
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
01.09.2013, 13:11
Цитата Сообщение от nexen Посмотреть сообщение
Собственно, в чем смысл данных типов, в отличие от обычных unsigned int, int и подобных им?
Не читая предыдущих сообщений скажу:
size_t - беззнаковый целый тип, гарантирующий правильную ( [0,размер массива] ) индексацию массива не зависимо от платформы. Грубо говоря - максимальный беззнаковый целый тип платформы.
uint32 - видимо имелось в виду uint32_t. Это беззнаковый целый тип, гарантирующий размерность ("ширину") переменной 32 бита.
unsigned int - так сказать, language-specific, просто беззнаковый целый тип, "ширина" которого может отличаться от платформы и ОС, т.е. например, компилируя 32-битное приложение "ширина" типа unsigned int будет равна 32-м битам, в 64-битном приложении "ширина" будет равна 64-м битам.
Остальное по-аналогии.
2
01.09.2013, 13:17

Не по теме:

Цитата Сообщение от Убежденный Посмотреть сообщение
Например, вы передаете данные по сети и хотите быть уверенными, что на другой стороне их тоже прочитают правильно. Независимо от версии компилятора и разрядности ОС.
Для этого надо передавать байты. Endianness же.

2
01.09.2013, 13:20

Не по теме:

Тут я не могу не согласится с OhMyGodSoLong. Пример не очень удачный..

1
01.09.2013, 13:20

Не по теме:

OhMyGodSoLong, для этого есть htonl/ntohl

1
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
01.09.2013, 13:20
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Для этого надо передавать байты. Endianness же.
Согласен. Просто как пример.
А для реальной платформо-независимости лучше вообще XML/JSON...
1
01.09.2013, 13:23

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение
OhMyGodSoLong, для этого есть htonl/ntohl
Не думаю что кто-то применяет её для "преобразования" данных для последующей передачи.

1
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
01.09.2013, 13:26
Цитата Сообщение от castaway Посмотреть сообщение
Не думаю что кто-то применяет её для "преобразования" данных для последующей передачи.
Я просто не могу представить для чего еще их можно применять, потому что именно для этого они и сделаны:
htonl, htons, ntohl, ntohs - convert values between host and network byte order
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
01.09.2013, 13:28
Цитата Сообщение от fasked Посмотреть сообщение

Не по теме:

OhMyGodSoLong, для этого есть htonl/ntohl

Не по теме:

У которых нет стандартных вариантов для восьмибайтных величин. И которых нет на POSIX-несовместимых системах.

1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
01.09.2013, 13:30
Цитата Сообщение от fasked Посмотреть сообщение
Я просто не могу представить для чего еще их можно применять, потому что именно для этого они и сделаны
Ты не совсем правильно понял то что я хотел донести.. Если есть функция для преобразования порядка байтов в "правильный" порядок, то это не значит что ей обязаны пользоваться все поголовно. Я к тому, что "матерые" программисты ей не пользуются передавая данные.
1
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
01.09.2013, 13:45
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
У которых нет стандартных вариантов для восьмибайтных величин. И которых нет на POSIX-несовместимых системах.
В стандарте много чего нет, и всегда можно быстро набросать что-то подобное:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#define TYP_INIT 0 
#define TYP_SMLE 1 
#define TYP_BIGE 2 
 
unsigned long long htonll(unsigned long long src) { 
  static int typ = TYP_INIT; 
  unsigned char c; 
  union { 
    unsigned long long ull; 
    unsigned char c[8]; 
  } x; 
  if (typ == TYP_INIT) { 
    x.ull = 0x01; 
    typ = (x.c[7] == 0x01ULL) ? TYP_BIGE : TYP_SMLE; 
  } 
  if (typ == TYP_BIGE) 
    return src; 
  x.ull = src; 
  c = x.c[0]; x.c[0] = x.c[7]; x.c[7] = c; 
  c = x.c[1]; x.c[1] = x.c[6]; x.c[6] = c; 
  c = x.c[2]; x.c[2] = x.c[5]; x.c[5] = c; 
  c = x.c[3]; x.c[3] = x.c[4]; x.c[4] = c; 
  return x.ull; 
}
Передавать байтами, а потом склеивать это, как говорится, "те же яйца, только в профиль".
Цитата Сообщение от castaway Посмотреть сообщение
"матерые" программисты ей не пользуются передавая данные
Ну-ну
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
01.09.2013, 13:46  [ТС]
Убежденный, int на x86 = 4, а на x64 = 8?
0
01.09.2013, 13:49

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение
Ну-ну
Вы изменитесь в моих глазах, если скажете что используете данную функцию при каждой передаче данных в сеть.

0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
01.09.2013, 13:50
Цитата Сообщение от nexen Посмотреть сообщение
Убежденный, int на x86 = 4, а на x64 = 8?
На Windows они равны. LLP64.
На счет других ОС - не поручусь.
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
01.09.2013, 13:51
Цитата Сообщение от nexen Посмотреть сообщение
Убежденный, int на x86 = 4, а на x64 = 8?
x86 - это 386, 486, 586, 686 и т.п.
А что такое x64 ?
1
01.09.2013, 14:05

Не по теме:

Цитата Сообщение от castaway Посмотреть сообщение
Вы изменитесь в моих глазах, если скажете что используете данную функцию при каждой передаче данных в сеть.
Теперь уже не использую, потому что в связи со сменой проекта работаю на гораздо более высоком уровне. Ну и к слову, "grep -R htonl ." по исходникам прошивки DDWRT для роутеров выдает достаточное количество совпадений, чтобы опровергнуть слова о "матерых" программистах. Относительно стандартное применение htonl-like функции выглядит так:
Code
1
2
3
./btstream.cpp:  *p = htonl(idx); p++;
./btstream.cpp:  *p = htonl(off); p++;
./btstream.cpp:  *p = htonl(len);

1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
01.09.2013, 14:11
Цитата Сообщение от castaway Посмотреть сообщение
x86 - это 386, 486, 586, 686 и т.п.
А что такое x64 ?
x86 принято так называть 32 битные процессоры
в них не входит 8086, 8088, 80186, 80286 они не 32 битные
x64 соответственно 64битные
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.09.2013, 14:11
Помогаю со студенческими работами здесь

Отличие Uint32 от Int32
Господа, понимающие. Объясните, пожалуйста в чём отличие? Рихтер говорит int32 это числовой тип со знаком, а uint32 без знака. О...

Преобразование шестнадцатиричной последовательности в UInt32
Здравствуйте, не работает библиотека Globalization для преобразования hex в UInt32 using System.Globalization; for (int i = 0; i...

Преобразование UInt32 в UInt64. Ошибка MSDN?
Почему в справке msdn в таблице преобразования типов, НЕ написано что тип UInt32 можно без потерь преобразовать в UInt64. Это ошибка msdn,...

Преобразовать массив байтов (Byte[]) в целое без знака (UInt32)
Всем привет. У меня простой вопрос. Мне нужно преобразовать массив байтов (Byte) в целое без знака (UInt32). На С++ я бы сделал это...

Как из Uint64 переписать правые 32 раряда в число формата Uint32
Подскажите, как из Uint64 переписать правые 32 раряда в число формата Uint32, или левые 32, не важно в принципе)


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru