187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|
1 | |
uint32, size_t и подобные им01.09.2013, 10:53. Показов 19616. Ответов 41
Метки нет (Все метки)
0
|
01.09.2013, 10:53 | |
Ответы с готовыми решениями:
41
Беззнаковый тип size_t: чем различие между size_t, uintptr_t, ptrdiff_t и intptr_t? uint32 и UINT64 Преобразование массива к uint32 Отличие Uint32 от Int32 |
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
|
|
01.09.2013, 10:59 | 2 |
1
|
01.09.2013, 12:50 | 3 |
Например, переносимость. Если использовать, например, unsigned int вместо size_t, программа будет работать только на 32разрядных системах! Например, придётся писать отдельную программу для 64х разрядных, например.
...например.
1
|
Ушел с форума
|
|
01.09.2013, 12:57 | 4 |
uint32 - это тип фиксированного размера (32-бита). Иметь такие типы иногда очень желательно.
Например, вы передаете данные по сети и хотите быть уверенными, что на другой стороне их тоже прочитают правильно. Независимо от версии компилятора и разрядности ОС. А размер size_t (также, как и ptrdiff_t) варьируется, в зависимости от архитектуры. На x86 size_t равен 4 байтам, а на x64 - уже восьми. Это помогает поддерживать работу с объемами памяти соответствующего размера. Кроме того, название size_t более описательно, чем int: видя функцию, которая возвращает size_t, сразу становится понятно, что возвращается какой-то размер, а не просто число.
1
|
01.09.2013, 13:11 | 5 |
Не читая предыдущих сообщений скажу:
size_t - беззнаковый целый тип, гарантирующий правильную ( [0,размер массива] ) индексацию массива не зависимо от платформы. Грубо говоря - максимальный беззнаковый целый тип платформы. uint32 - видимо имелось в виду uint32_t. Это беззнаковый целый тип, гарантирующий размерность ("ширину") переменной 32 бита. unsigned int - так сказать, language-specific, просто беззнаковый целый тип, "ширина" которого может отличаться от платформы и ОС, т.е. например, компилируя 32-битное приложение "ширина" типа unsigned int будет равна 32-м битам, в 64-битном приложении "ширина" будет равна 64-м битам. Остальное по-аналогии.
2
|
OhMyGodSoLong
|
01.09.2013, 13:17
#6
|
2
|
castaway
|
01.09.2013, 13:20
#7
|
Не по теме: Тут я не могу не согласится с OhMyGodSoLong. Пример не очень удачный..
1
|
fasked
|
01.09.2013, 13:20
#8
|
Не по теме: OhMyGodSoLong, для этого есть htonl/ntohl
1
|
Ушел с форума
|
|
01.09.2013, 13:20 | 9 |
Согласен. Просто как пример.
А для реальной платформо-независимости лучше вообще XML/JSON...
1
|
castaway
|
01.09.2013, 13:23
#10
|
1
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
01.09.2013, 13:28 | 12 |
Не по теме: У которых нет стандартных вариантов для восьмибайтных величин. И которых нет на POSIX-несовместимых системах.
1
|
01.09.2013, 13:30 | 13 |
Ты не совсем правильно понял то что я хотел донести.. Если есть функция для преобразования порядка байтов в "правильный" порядок, то это не значит что ей обязаны пользоваться все поголовно. Я к тому, что "матерые" программисты ей не пользуются передавая данные.
1
|
01.09.2013, 13:45 | 14 | |||||
В стандарте много чего нет, и всегда можно быстро набросать что-то подобное:
Ну-ну
1
|
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|
01.09.2013, 13:46 [ТС] | 15 |
Убежденный, int на x86 = 4, а на x64 = 8?
0
|
castaway
|
01.09.2013, 13:49
#16
|
0
|
Ушел с форума
|
|
01.09.2013, 13:50 | 17 |
1
|
fasked
|
01.09.2013, 14:05
#19
|
Не по теме: Теперь уже не использую, потому что в связи со сменой проекта работаю на гораздо более высоком уровне. Ну и к слову, "grep -R htonl ." по исходникам прошивки DDWRT для роутеров выдает достаточное количество совпадений, чтобы опровергнуть слова о "матерых" программистах. Относительно стандартное применение htonl-like функции выглядит так: Код
./btstream.cpp: *p = htonl(idx); p++; ./btstream.cpp: *p = htonl(off); p++; ./btstream.cpp: *p = htonl(len);
1
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
|
|
01.09.2013, 14:11 | 20 |
x86 принято так называть 32 битные процессоры
в них не входит 8086, 8088, 80186, 80286 они не 32 битные x64 соответственно 64битные
1
|
01.09.2013, 14:11 | |
01.09.2013, 14:11 | |
Помогаю со студенческими работами здесь
20
Преобразование шестнадцатиричной последовательности в UInt32 Преобразование UInt32 в UInt64. Ошибка MSDN? Преобразовать массив байтов (Byte[]) в целое без знака (UInt32) Как из Uint64 переписать правые 32 раряда в число формата Uint32 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |