自定义字节大小?

时间:2010-04-21 01:45:30

标签: c++ size byte sizeof primitive

那么,您知道char类型的原语如何具有1个字节的大小吗?如何制作具有自定义尺寸的图元?所以,而不是一个大小为4字节的int,而不是让我们做一个大小为16的字节。 有没有办法做到这一点?有办法吗?

4 个答案:

答案 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个字节而无需小心。