如何在Swift中使用位字段来存储1位以上的值

塞萨尔·吉梅内斯(Cesar Gimenes)

C语言中,我可以执行以下操作:

struct byte_nibbles {
    unsigned char b1: 4;
    unsigned char b2: 4;
    unsigned char b3: 4;
    unsigned char b4: 4;
    unsigned char b5: 4;
    unsigned char b6: 4;
    unsigned char b7: 4;
    unsigned char b8: 4;
};

union {
    unsigned long var;
    struct byte_nibbles b;
}
u;

int main(void)
{
    u.b.b1=0x01; u.b.b2=0x02; u.b.b3=0x03; u.b.b4=0x04;
    u.b.b5=0x05; u.b.b6=0x06; u.b.b7=0x07; u.b.b8=0x08;
    return 0;
}

因此,我可以访问byte_nibbles的特定部分。显然,这只是一个例子。可以创建适合基本类型的任何大小的位字段。

尽管经过我的努力和大量研究,但我仍无法弄清楚如何在Swift中执行此操作我可以按位使用以得到相同的结果,但这并不那么可读和优雅。

任何的想法?

马丁·R

Swift根本不支持位字段,因此您只能

  • 改用下一个较大的整数类型(在您的情况下Int8),并接受变量需要更多的内存,或者
  • 使用位操作访问整数的不同部分。

对于第二种情况,您可以定义自定义计算属性以简化访问。举个例子:

extension UInt8 {
    var lowNibble : UInt8 {
        get {
            return self & 0x0F
        }
        set(newValue) {
            self = (self & 0xF0) | (newValue & 0x0F)
        }
    }

    var highNibble : UInt8 {
        get {
            return (self & 0xF0) >> 4
        }
        set(newValue) {
            self = (self & 0x0F) | ((newValue & 0x0F) << 4)
        }
    }
}


var byte : UInt8 = 0
byte.lowNibble = 0x01
byte.highNibble = 0x02
print(byte.lowNibble)
print(byte.highNibble)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Swift中使用位操作?

来自分类Dev

如何在Swift中使用结构处理按位运算?

来自分类Dev

如何使用6位存储值?

来自分类Dev

如何在Java中使用位掩码

来自分类Dev

如何在C ++中使用位掩码?

来自分类Dev

如何存储128位值?

来自分类Dev

如何在Java中使用位操作获取数字的绝对值

来自分类Dev

在C中使用struct提取位字段

来自分类Dev

如何在Cython中使用128位整数

来自分类Dev

如何在C中使用64位内联汇编?

来自分类Dev

如何在地图中使用位集?

来自分类Dev

如何在Android中使用256位AES加密

来自分类Dev

如何在邮件签名中使用位智导航链接

来自分类Dev

如何在 QueryDSL 中使用按位运算符?

来自分类Dev

如何对存储在表中的值执行按位运算,并在sql查询的where子句中使用它?

来自分类Dev

如何对存储在表中的值执行按位运算,并在sql查询的where子句中使用它?

来自分类Dev

如何在C中按位运算存储移位的位?

来自分类Dev

如何在64位计算机上的32位Python中使用virtualenv?

来自分类Dev

如何使存储过程返回位值?

来自分类Dev

如何使存储过程返回位值?

来自分类Dev

如何在C ++中将字符串转换为1位以上的整数?

来自分类Dev

从位字段存储和检索带符号的值

来自分类Dev

在C中使用位字段时的字段顺序

来自分类Dev

如何在Django查询中使用列表来添加字段

来自分类Dev

如何在Swift中创建位掩码

来自分类Dev

c# SQLite 如何在 Dictionay 中使用字段名称和字段值按 id 存储对象

来自分类Dev

如何在Python中使用5位字符编码来编码英文纯文本(仅由字母az和空格组成)?

来自分类Dev

如何在Ruby中使用字符串格式化程序来限制小数点前的两位和小数点后的两位?

来自分类Dev

如何使用BufferedImage对象创建1位位图?

Related 相关文章

  1. 1

    如何在Swift中使用位操作?

  2. 2

    如何在Swift中使用结构处理按位运算?

  3. 3

    如何使用6位存储值?

  4. 4

    如何在Java中使用位掩码

  5. 5

    如何在C ++中使用位掩码?

  6. 6

    如何存储128位值?

  7. 7

    如何在Java中使用位操作获取数字的绝对值

  8. 8

    在C中使用struct提取位字段

  9. 9

    如何在Cython中使用128位整数

  10. 10

    如何在C中使用64位内联汇编?

  11. 11

    如何在地图中使用位集?

  12. 12

    如何在Android中使用256位AES加密

  13. 13

    如何在邮件签名中使用位智导航链接

  14. 14

    如何在 QueryDSL 中使用按位运算符?

  15. 15

    如何对存储在表中的值执行按位运算,并在sql查询的where子句中使用它?

  16. 16

    如何对存储在表中的值执行按位运算,并在sql查询的where子句中使用它?

  17. 17

    如何在C中按位运算存储移位的位?

  18. 18

    如何在64位计算机上的32位Python中使用virtualenv?

  19. 19

    如何使存储过程返回位值?

  20. 20

    如何使存储过程返回位值?

  21. 21

    如何在C ++中将字符串转换为1位以上的整数?

  22. 22

    从位字段存储和检索带符号的值

  23. 23

    在C中使用位字段时的字段顺序

  24. 24

    如何在Django查询中使用列表来添加字段

  25. 25

    如何在Swift中创建位掩码

  26. 26

    c# SQLite 如何在 Dictionay 中使用字段名称和字段值按 id 存储对象

  27. 27

    如何在Python中使用5位字符编码来编码英文纯文本(仅由字母az和空格组成)?

  28. 28

    如何在Ruby中使用字符串格式化程序来限制小数点前的两位和小数点后的两位?

  29. 29

    如何使用BufferedImage对象创建1位位图?

热门标签

归档