我正在编写网络报头,很多协议都使用4位字段。有没有一种方便的类型可以用来表示这些信息?
我找到的最小的类型是一个字节。然后,我必须使用大量的二进制操作来引用该变量中的几个位。
发布于 2009-05-14 14:29:37
在Mehrdads answer上扩展,也使用带有字节的联合,以避免一些看起来很邪恶的强制转换:
union Nibbler {
struct {
unsigned int first:4;
unsigned int second:4;
} nibbles;
unsigned char byte_value;
}
发布于 2009-05-14 14:26:47
在结构中使用字段:
struct Header
{
unsigned int lowestNibble : 4;
unsigned int anotherNibble : 4;
unsigned int : 18; # Unnamed padding.
bool aBool : 1;
bool anotherBool : 1;
unsigned int highestNibble : 4;
};
: 4
指示该条目应该占用4比特。您可以使用您喜欢的任意数量的位。你可以使用任何你喜欢的内置类型。
通常,您最终会将指向数据的指针转换为Header *
,然后执行以下操作:
pHeader->lowestNibble = 5;
发布于 2009-05-14 14:19:16
不,没有方便的类型用于小吃。但是,使用宏或模板函数可以很容易地创建它们。如果/当你需要处理endian-ness时,这种方法尤其有效。
Foredecker
https://stackoverflow.com/questions/863575
复制相似问题