8-900-374-94-44
[email protected]
Slide Image
Меню

Uint32 t c: c — Are types like uint32, int32, uint64, int64 defined in any stdlib header?

С++ — идентификатор uint32_t не найден, ошибка

Задавать вопрос

спросил

Изменено 5 месяцев назад

Просмотрено 338 тысяч раз

Я переношу код из Linux C в Visual C++ для Windows.

Visual C++ не знает #include , поэтому я закомментировал это.

Позже я нашел много этих 'uint32_t': идентификатор не найден ошибок. Как это решить?

  • c++
  • c
  • визуальный-c++
6

Этот тип определен в заголовке C , который является частью стандарта C++11, но не является стандартом C++03. Согласно странице Википедии в заголовке, она не поставлялась с Visual Studio до VS2010.

Тем временем вы, вероятно, могли бы подделать свою собственную версию заголовка, добавив typedef , которые сопоставляют пользовательские целочисленные типы Microsoft с типами, ожидаемыми C. Например:

 typedef __int32 int32_t;
typedef без знака __int32 uint32_t;
/* ... и т. д. ... */
 
13

Вы можете #include . Является частью стандарта C++ с 2011 года.

2

У меня такая же ошибка и она исправлена ​​включив в файл следующий

 #include 
 

в начале вашего файла.

1

Boost.Config предлагает эти определения типов для наборов инструментов, которые не предоставляют их изначально. Документация по этой конкретной функции находится здесь: Standard Integer Types

На странице проекта msinttypes доступна реализация — «Этот проект восполняет отсутствие stdint.h и inttypes.h в Microsoft Visual Studio».

У меня нет опыта работы с этой реализацией, но я видел, как ее рекомендовали другие на SO.

1

В Windows я обычно использую типы Windows. Чтобы использовать его, вы должны включить .

В данном случае uint32_t — это UINT32 или просто UINT.

Определения всех типов находятся здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx

Мне пришлось запустить проект в VS2010, и я не мог внести никаких изменений в код. Мое решение состояло в том, чтобы установить vS2013 и в VS2010 указать каталоги VC++->IncludeDirectories в Program Files (x86)\Microsoft Visual Studio 12.0\VC\include. Тогда мой проект скомпилировался без проблем.

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.

C — Тип — Что такое uint8_t, uint16_t, uint32_t и uint64_t?

Вероятно, вам интересно, что такое uint8_t , uint16_t , uint32_t и uint64_t .
Хороший вопрос. Потому что это может быть действительно полезно!

Получается, что они равны соответственно: unsigned char , unsigned short , unsigned int и unsigned long long .
Но что такое диапазоны всех этих типов?

Давайте проверим это в этом учебнике по C.

Объяснение

Мы будем использовать переменную с именем testValue , равное 0xFFFFFFFFFFFFFFFF

.

Обратите внимание, что 0xFFFFFFFFFFFFFFFF совпадает с 18 , 446 , 744 9010 3, 073 , 709 , 551 615 и это максимальное значение возможно для unsigned long long , в зависимости от архитектуры вашего процессора (как сказал gineera в своем комментарии).

Не так-то просто понять все эти вещи, но продолжайте пробовать, это станет яснее после окончания этого урока. По крайней мере, я на это надеюсь.

В части кода мы увидим, что переменная number8 имеет результат 255 .
Почему? Потому что 255 — это максимальное значение unsigned char или uint8_t

.
Таким образом, если мы поместим значение 256, наш результат будет 0,
Действительно, после 255 мы возвращаемся к 0.

Например, если бы мы добавили +1 к каждому числу ниже, мы бы получили:

0 (первое значение символа или 1 байт)
1
2
3
...
250
251
252
253
254
255 (максимальное значение символа или 1 байта)
0 (первое значение символа или 1 байт)
1
2
3
... до 255 (максимальное значение символа или 1 байта)
0
1
2
3
... до 255 (максимальное значение символа или 1 байта)
0
1
2
3
и так далее. 

Таким образом, мы не сможем иметь значение 256 в символе (или байте).
Если бы мы хотели иметь такое значение, нам пришлось бы использовать другой тип, например unsigned short или uint16_t равно 2 байтам или 16 битам.

Ничего себе, это все еще путать? Давай продолжим!

Действительно, с

беззнаковым коротким мы сможем использовать этот тип до значения 65535 в десятичном виде
или 0xFFFF в шестнадцатеричном формате.

Но в нашем примере мы будем использовать огромное значение: 18 446 744 073 709 551 615 .

И мы получим максимальное значение каждого типа!

98) — 1 = 256 — 1 = 255.
Действительно, наше первое значение равно 0, а не 1.
Итак, второе значение равно 1, третье равно 2 и так далее.
Таким образом, наше последнее значение равно 255.

Код

// тестовое значение
unsigned long long testValue     = 0xFFFFFFFFFFFFFFFFFF; // 18446744073709551615
// 1 байт -> [0-255] или [0x00-0xFF]
uint8_t         number8     = testValue; // 255
unsigned char    numberChar    = testValue; // 255
// 2 байта -> [0-65535] или [0x0000-0xFFFF]
uint16_t         number16     = testValue; // 65535
unsigned short    numberShort    = testValue; // 65535
// 4 байта ->
[0-4294967295] или [0x00000000-0xFFFFFFFF] uint32_t         number32     = testValue; // 4294967295 unsigned int     numberInt    = testValue; // 4294967295 // 8 байт -> [0-18446744073709551615] или [0x0000000000000000-0xFFFFFFFFFFFFFFFFFF] uint64_t             number64         = testValue; // 18446744073709551615 unsigned long long     numberLongLong    = testValue; // 18446744073709551615

Заключение

Теперь вы можете обращаться с битами и байтами как профессионал.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *