那么,您知道char类型的原语如何具有1个字节的大小吗?如何制作具有自定义尺寸的图元?所以,而不是一个大小为4字节的int,而不是让我们做一个大小为16的字节。 有没有办法做到这一点?有办法吗?
答案 0 :(得分:5)
通常,您只需创建一个表示您感兴趣的数据的结构。如果它是16个字节的数据,则它是许多较小类型的集合,或者您正在处理具有本机16字节整数类型的处理器。
如果您尝试表示非常大的数字,则可能需要找到一个处理任意大小数字的特殊库。
答案 1 :(得分:4)
这取决于你为什么这样做。通常,您不能使用少于8位的类型,因为这是架构的可寻址单元。但是,您可以使用结构来定义不同的长度:
struct s {
unsigned int a : 4; // a is 4 bits
unsigned int b : 4; // b is 4 bits
unsigned int c : 16; // c is 16 bits
};
但是,不能保证结构将是24位长。此外,这可能会导致endian问题。在可以的地方,最好使用系统无关的类型,例如uint16_t等。你也可以使用按位运算符和位移来非常具体地旋转。
答案 2 :(得分:1)
在C ++ 11中,有一个很好的解决方案:std :: aligned_storage。
#include <memory>
#include <type_traits>
int main()
{
typedef typename std::aligned_storage<sizeof(int)>::type memory_type;
memory_type i;
reinterpret_cast<int&>(i) = 5;
std::cout << reinterpret_cast<int&>(i) << std::endl;
return 0;
}
它允许您在堆栈上声明一个未初始化的存储块。
答案 3 :(得分:0)
如果要创建新类型,请键入def it。如果您希望它的大小为16字节,请键入一个结构,其中包含16个字节的成员数据。请注意,编译器通常会在您身上填充内容以满足您的系统对齐需求。 1字节结构很少保持1个字节而无需小心。