现代 C++20 实战高手课
卢誉声
Autodesk 首席工程师
3781 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 29 讲
现代 C++20 实战高手课
15
15
1.0x
00:00/00:00
登录|注册

17|Bit library(二):如何利用新bit操作库释放编程生产力?

你好,我是卢誉声。
在上一讲中,我们已经通过一些简单的编程示例,展示了 C++20 及其后续演进提供的位操作库的基本使用方法。
但是,简单的示例还无法体现位操作库的真正威力。所以,这一讲我会通过一个较为完整的工程代码,带你体会如何充分利用全新的位操作库,实现强大的序列化和反序列化功能以及位运算。
好,话不多说,就让我们开始吧(课程配套代码可以从这里获取)。

扩展数据流处理实战案例

在实际生产环境中,我们经常需要通过网络传输特定的数据,但是不同语言和不同平台的内存模型可能完全不同。这时,发送方需要将数据转换为符合特定标准的数据流,接收方将数据解析后转换为内部变量。
我们将变量转换为数据流的操作称为“序列化(Serialization)”,将数据流转换成变量的过程称为“反序列化(Deserialization)”。
我们曾在第 13 讲——Ranges 实战:数据序列函数式编程中,实现了一个获取三维模型数据并进行统计的程序。
今天,我们将继续对其进一步扩展,使用位操作库实现序列化和反序列化。
不知道你是否还记得,我在第 13 讲偷了一个懒,直接使用了硬编码的代码作为数据输入。我们会在这一讲改进一下,将本地的二进制文件读取到内存里,将其转换成内部变量。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

C++20位操作库的应用在序列化、反序列化和位运算领域带来了显著的改进,本文深入介绍了如何利用这些新特性。通过一个完整的工程代码示例,展示了如何充分利用位操作库实现强大的序列化和反序列化功能以及位运算。在实际生产环境中,不同语言和平台的内存模型可能不同,因此需要进行序列化和反序列化操作。作者介绍了如何使用位操作库实现这些操作,并通过扩展数据流处理实战案例展示了其应用。此外,还对数据结构进行了更新,修改了基础类型定义,新增了RenderChannelBits类型与RenderChannel枚举,以及对ModelObject的定义进行了修改。通过代码示例展示了如何通过位运算设置一个对象有哪些渲染通道,以及如何通过位运算获取一个对象是否具有某个渲染通道。文章还介绍了自定义类型序列化、反序列化的框架扩展,以及使用位运算进行计算的实际案例。总之,本文通过实际案例和代码示例生动地展示了如何利用C++20位操作库实现序列化和反序列化功能以及位运算,为读者提供了深入理解和应用该技术的指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《现代 C++20 实战高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • 李云龙
    分享一下我的思考题答案: inline constexpr uint8_t ComputeByteOrder2() { constexpr int16_t num = 0x0102; constexpr std::bitset<16> bs(num); if constexpr(bs[7] == 0b1) { return 1; } else { return 0; } } enum class endian { little, big, native = ComputeByteOrder2() };

    作者回复: 赞

    2024-01-21归属地:北京
    1
  • peter
    请问:C++20的位操作比以前版本的性能有多少提升?

    作者回复: 位操作性能上没有提升,只是不需要自己实现了。

    2023-03-02归属地:北京
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部