首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在windows C/C++中使用半字节(4位变量)

在windows C/C++中使用半字节(4位变量)
EN

Stack Overflow用户
提问于 2009-05-14 14:15:41
回答 3查看 37K关注 0票数 20

我正在编写网络报头,很多协议都使用4位字段。有没有一种方便的类型可以用来表示这些信息?

我找到的最小的类型是一个字节。然后,我必须使用大量的二进制操作来引用该变量中的几个位。

EN

回答 3

Stack Overflow用户

发布于 2009-05-14 14:29:37

在Mehrdads answer上扩展,也使用带有字节的联合,以避免一些看起来很邪恶的强制转换:

代码语言:javascript
复制
union Nibbler {
     struct { 
        unsigned int first:4;
        unsigned int second:4;
     } nibbles;
     unsigned char byte_value;
}
票数 17
EN

Stack Overflow用户

发布于 2009-05-14 14:26:47

在结构中使用字段:

代码语言:javascript
复制
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 *,然后执行以下操作:

代码语言:javascript
复制
pHeader->lowestNibble = 5;
票数 4
EN

Stack Overflow用户

发布于 2009-05-14 14:19:16

不,没有方便的类型用于小吃。但是,使用宏或模板函数可以很容易地创建它们。如果/当你需要处理endian-ness时,这种方法尤其有效。

Foredecker

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/863575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档