Я ищу функцию C ++, которая возвращает размер типа. Например :
#include <stdint.h>
int16_t my_var;
int32_t size_of_var;
// magical_function is what I'm looking for
// size_of_var should be equal to 16 because my_var is a int16_t
size_of_var = my_var.magical_function() ;
Я знаю, что size () существует для получения длины строки, поэтому я думаю, что есть функция, указывающая на это.
Кроме того, я работаю с библиотекой Clang, так что я могу получить тип (http://clang.llvm.org/doxygen/classclang_1_1Type.html) но я в настоящее время понятия не имею, чтобы сравнить 2 типа и узнать большее между этими двумя.
В случае, если вы хотите 16 вместо 2 для int16_t
sizeof(my_var) * CHAR_BIT
sizeof
дать вам сколько байтов, и CHAR_BIT
дать вам сколько бит в байте (обычно 8)
Доступные синтаксисы для команды (sizeof):
Они оба возвращаются std::size_t
,
Примеры типов int
, float
, double
в то время как выражения могут оценить размер объекта. Для уточнения добавлю следующее:
sizeof(int); // Return size of int type.
sizeof(float); // Return size of float type.
sizeof(double); // Return size of double type.
struct my_struct {}; // Creates an empty struct named my_struct.
my_struct alpha; // Initializes alpha as a my_struct.
sizeof alpha; // Returns size of alpha.
Дополнительную информацию можно найти Вот.
Надеюсь, поможет!
Чтобы вычислить размер типа в битах, используйте CHAR_BIT
макрос в сочетании с sizeof
оператор:
#include <cstdint>
#include <climits>
int16_t my_var;
int32_t size_of_var;
// size_of_var should be equal to 16 because my_var is a int16_t
size_of_var = CHAR_BIT * sizeof(int16_t);
Вы можете попробовать вот так:
size_of_var = sizeof(my_var);
В вашем случае вы можете попробовать с:
sizeof(my_var) * CHAR_BIT
На примечании стороны:
Стандарт C99 требует, чтобы
sizeof(short) <= sizeof(int) <= sizeof(long) < sizeof(long long)
Type C99 Minimum Windows 32bit
char 8 8
short 16 16
int 16 32
long 32 32
long long 64 64
Также int8_t
гарантированно будет 8 бит, а также int16_t
гарантированно будет 16 бит, и т.п.
Вам нужно использовать оператор sizeof.
size_of_var = sizeof(my_var);
Унарный оператор sizeof()
вернет вам размер вашей переменной в байтах.
Используйте это так:
size_of_var = sizeof(my_var);
sizeof
Оператор выдаст вам количество байтов, но вы спросите количество бит. Все компьютеры массового потребителя имеют восемь бит на байт, поэтому ваша функция может быть определена как:
template<typename T>
int bitsize(const T& var) {
return sizeof(var) * 8;
}
Есть, однако, некоторые очень специфические машины, которые не имеют восьми бит на байт. В этом случае вы можете использовать CHAR_BIT
макрос:
#include <climits>
template<typename T>
int bitsize(const T& var) {
return sizeof(var) * CHAR_BIT;
}
Возможно, стоит отметить, что в этом случае лучше иметь макрос, который дает вам количество бит, а не функцию. Макрос всегда даст вам константу времени компиляции:
#include <climits>
#define BITSIZE(VAR) (sizeof(VAR) * CHAR_BIT)