我正在玩我的玩具语言设计,我遇到了一些问题。我希望它具有以位长度指定的变量。因此,例如,一个声明变量如下:
byte value;
two_bytes value;
现在,这是我的问题。我正在尝试用C(或C ++)语言编写解释器。我对C / C ++的理解是它们的变量类型保证至少是最小大小,但它们可以更大(即,char将至少为8位,但某些实现将具有16位char)。 / p>
如何在C / C ++中编写一个只处理特定长度位的解释器?是唯一一种拥有布尔数组或为char类型设置位域的方法吗?
答案 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_t
,uint16_t
,uint32_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位,我只是为了这个例子而使用它。