反序列化函数(字节数组到 uint32 )

2024-04-10

编写反序列化函数将字节数组转换为 32 位无符号整数的最佳方法是什么?

    typedef unsigned long  uint32;

    uint32 deserialize_uint32(unsigned char *buffer)
    {
        uint32 value = 0;

        value |= buffer[0] << 24;
        value |= buffer[1] << 16;
        value |= buffer[2] << 8;
        value |= buffer[3];
        return value;

    }

    unsigned char* deserialize_uint32B(unsigned char *buffer, uint32* value)
    {
        *value = 0;

        *value |= buffer[0] << 24;
        *value |= buffer[1] << 16;
        *value |= buffer[2] << 8;
        *value |= buffer[3];
        return buffer + 4;
    }

谢谢!或者如果有更好的方法请告诉我..谢谢!


我更喜欢你的第一个变体而不是第二个。或者,您可以通过使用四个局部变量来利用并行处理,这些变量将各个字节移动正确的量。然后,在最后一行你return b0shifted | b1shifted | b2shifted | b3shifted.

无论如何,这一切都取决于您的编译器。您的第二个变体包含更多加载/存储操作,因此第一个变体具有更少的抽象操作。

就可读性、可理解性和清晰度而言,你的第一个变体非常棒。它也适用于您使用的任何奇怪的平台(字节序、对齐方式),前提是CHAR_BIT == 8.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反序列化函数(字节数组到 uint32 ) 的相关文章

随机推荐

  • 异常模块的阴谋导入错误

    我到处搜索都找不到解决这个问题的方法 我正在尝试导入plotly在 Jupyter Notebook 中使用以下代码并分别收到以下错误 Code import sys print sys path sys path append usr l
  • C# 4.0 中的“动态”类型有何用途?

    C 4 0 引入了一种称为 动态 的新类型 听起来不错 但是程序员会用它做什么呢 有没有什么情况可以挽救局面 The dynamic添加了关键字以及 C 4 0 的许多其他新功能 以便更轻松地与具有不同 API 的其他运行时中或来自其他运行
  • Javascript 日期加 2 周(14 天)

    我用它来获取日期 var currentTime new Date var month currentTime getMonth 1 var day currentTime getDate var year currentTime getF
  • 即使文件存在于我的 Linux 上,php file_exists 也会返回 false

    这个问题已经被问过很多次了 但我找到的答案都没有帮助我 我正在尝试让 php file exists 工作 它起作用的唯一情况是 php 文件与要使用 file exist 的文件位于同一目录中并且仅使用文件名 即不包括路径 但这不是随之而
  • 开玩笑嘲笑测试之间出血,重置并不能解决问题

    测试两个模块 helper它利用render 这是可能的render扔 所以我处理它helper 我想要进行测试以确保其按预期工作 当我最初编写测试时 我在测试本身中编写了该测试所需的内容 包括模拟 使用jest doMock 一旦所有测试
  • Android 或 Java 类命名带有 $ 符号

    我正在审查某个项目 发现有许多类具有相同的名称 但末尾带有美元 符号 数字不断增加 例如 Class java Class 1 java Class 2 java Class n java OtherClass java OtherClas
  • 简单的 TabView 在 iOS 16 中崩溃

    有一个奇怪的崩溃 只发生在 iOS 16 中 当我尝试创建一个TabView使用页面样式 当数组为空时它会崩溃 但它在 iOS 15 中运行得很好 这是 iOS 16 的错误吗 Xcode版本 版本 14 0 14A309 iOS版本 16
  • JavaScript 在点击时显示和隐藏元素

    请原谅我的无知 我不知道我在做什么 但我正在努力 我试图通过搜索来找出它 但它只在 jQuery 中产生了一个功能结果 由于这是一个很小的部分 我认为最好只使用普通的 JavaScript 而不是加载整个 jQuery 库 有谁知道我如何
  • 使用 git bash 运行 bash 脚本时出现“未找到自由命令”

    我想在 bash 脚本中显示服务器负载 磁盘空间 使用情况和内存使用情况 但当我尝试时 echo Memory usage memory usage free m awk NR 2 printf Memory Usage s sMB 2f
  • ios CoreBluetooth[警告]未知错误:1309

    运行我正在开发的蓝牙应用程序时 我偶尔会在控制台上收到消息 CoreBluetooth 警告 未知错误 1309 即使该消息指出这是警告 它也会停止应用程序的执行 我已经能够通过关闭蓝牙设置然后重新打开来解决此问题 谁能告诉我导致此问题的原
  • 如何使用实体框架自动包含所有底层导航属性

    场景 我想向数据库添加一个具有导航属性和that实体具有导航属性 等等 基本上 数据库中的表都是相互连接的 所有表都是相互连接的 我使用 EF4 3 和上下文 请求模式 所以我不想启用延迟加载 加载我需要的实体会花费太多时间 到目前为止 我
  • 我如何知道我正在使用什么 Windows 主题?

    我试图让我的应用程序强制成为一个主题 这很简单 如下所示 http arbel net blog archive 2006 11 03 Forcing WPF to use a specific Windows theme aspx htt
  • 如何完全禁用 Sitecore Analytics

    我们的生产服务器上遇到 CPU 问题 使用jetbrains cpu profiler进行分析后 我们注意到程序集中的一些函数Sitecore Analytics被处决 这有点奇怪 因为我们在配置文件中禁用了所有与分析相关的配置 调查之后
  • 如何将文章浮动在两列中?

    我有这个问题 我正在建立一个社交网站 我必须在两栏中创建帖子 父容器是一个部分 而元素 post 是具有 float left 样式的文章 我怎样才能让那些较短的帖子下面产生的空白空间消失 css目前还没有好的解决方案 这通常称为砖石布局或
  • 使用 npm 安装失败,json 响应无效

    我之前已经安装了 npm 但不知何故我不得不卸载它 现在 我尝试再次安装 npm 以使用此命令创建 React 应用程序 npx create react app ip tracker 安装到一半的时候发现这个错误 npm ERR code
  • 使用命令行查找 Windows 上给定日期之后修改的文件

    我需要使用命令行搜索磁盘上在给定日期之后修改的文件 例如 dir S B WHERE modified date gt 12 07 2013 The forfiles该命令无需借助 PowerShell 即可运行 文章在这里 根据修改时间查
  • 在 Java 中创建 InetAddress 对象

    我正在尝试转换由 IP 号码或名称指定的地址 两者都是字符串 即localhost or 127 0 0 1 转化为Inet地址目的 没有构造函数 而是返回一个静态方法Inet地址 因此 如果我获得主机名 这不是问题 但如果我获得 IP 号
  • 无法导入copy_reg

    我在 PythonAnyware 上托管我的 Web2py 应用程序 并且在导入 web2py 显然需要的 copy reg 时遇到问题 在以前的版本中这不是问题 回溯如下 回溯 最近一次调用最后一次 File home richdijk
  • 为什么我不能在 C++ 中的 `std::map` 中存储引用?

    我知道引用不是指针 而是对象的别名 但是 我仍然不明白这对我作为程序员到底意味着什么 即幕后的引用是什么 我认为理解这一点的最好方法是理解为什么我无法在地图中存储参考 我知道我需要停止将引用视为指针的语法糖 只是不知道如何 按照我的理解 引
  • 反序列化函数(字节数组到 uint32 )

    编写反序列化函数将字节数组转换为 32 位无符号整数的最佳方法是什么 typedef unsigned long uint32 uint32 deserialize uint32 unsigned char buffer uint32 va