在8位块中处理变量的好方法是什么?

时间:2011-12-12 20:33:03

标签: c++ c compiler-construction programming-languages language-design

我正在玩我的玩具语言设计,我遇到了一些问题。我希望它具有以位长度指定的变量。因此,例如,一个声明变量如下:

byte value;
two_bytes value;

现在,这是我的问题。我正在尝试用C(或C ++)语言编写解释器。我对C / C ++的理解是它们的变量类型保证至少是最小大小,但它们可以更大(即,char将至少为8位,但某些实现将具有16位char)。 / p>

如何在C / C ++中编写一个只处理特定长度位的解释器?是唯一一种拥有布尔数组或为char类型设置位域的方法吗?

5 个答案:

答案 0 :(得分:5)

stdint标头是你需要的:

#include <cstdint>
std::int32_t x; // 32 bits signed
std::uint16_t y; // 16 bits unsigned

答案 1 :(得分:3)

如果你想要原始类型,那么大多数编译器应该提供<stdint.h>(或<cstdint>),其中包含uint8_tuint16_tuint32_t等类型

如果您想要模糊的尺寸(例如uint13_t),那么您最好只使用更大的标准尺寸。如果您需要节省空间,可以查看std::bitset,但对于大多数操作来说这可能会大大减慢。

答案 2 :(得分:3)

如果我找对你,

#include <stdint.h>
uint8_t my_byte_var;
int16_t my_signed_2byte_var;

可能是你的方式......

答案 3 :(得分:0)

通常你可以使用unsigned int来保存8位,然后仍然使用位运算符,例如shift(&gt;&gt;)。控制长度只是某种插入逻辑。 8位可以不大于2 ^ 8th - 1(255)。

答案 4 :(得分:0)

如果您不确定现有的位长,并希望将其传递给另一个值来解析它,您只需执行以下操作:

char a;
uint8_t b[4];

b = a;

现在你可以访问一个取决于长度的组件,最大大小为32位,虽然char永远不会是32位,我只是为了这个例子而使用它。