那么,您知道 char 类型的原语如何具有 1 个字节的大小吗?我将如何制作具有自定义大小的图元?所以就像我制作一个大小为 16 的 int 而不是一个大小为 4 字节的 int。有没有办法做到这一点?有办法解决吗?
thyrgle
问问题
8067 次
4 回答
6
这取决于你为什么这样做。通常,您不能使用少于 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 位长。此外,这可能会导致字节序问题。在可能的情况下,最好使用与系统无关的类型,例如 uint16_t 等。您还可以使用按位运算符和位移位来非常具体地旋转事物。
于 2010-04-21T01:48:56.627 回答
5
通常,您只需创建一个表示您感兴趣的数据的结构。如果它是 16 字节的数据,要么它是许多较小类型的集合,要么您正在使用具有本机 16 字节整数类型的处理器。
如果您试图表示非常大的数字,您可能需要找到一个处理任意大小数字的特殊库。
于 2010-04-21T01:49:26.797 回答
3
在 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;
}
它允许您在堆栈上声明一块未初始化的存储。
于 2017-07-02T06:12:10.713 回答
1
如果你想创建一个新类型,typedef 它。如果您希望它的大小为 16 字节,请 typedef 一个包含 16 字节成员数据的结构。请注意,编译器通常会在您身上填充东西以匹配您的系统对齐需求。一个 1 字节的结构很少不小心保留 1 个字节。
于 2010-04-21T02:13:31.003 回答