将 uint8 数组合并到 uint64 错误

2023-12-30

我正在尝试这段代码,首先将 uint64 数字拆分为 uint8 数组,然后将所述数组合并回原始数字。

但是当我尝试打印出号码时out,它似乎返回 uint64 的最大值。

uint8 buf[8];
uint64 test = 123456789012;
uint64 out = 0;

Uint64toUint8Arr(buf, test, 0);
out = Uint8ArrtoUint64(buf, 0);
std::cout << "out is " << out << std::endl;

我的函数定义为:

void Uint64toUint8Arr (uint8* buf, uint64 var, uint32 lowest_pos)
{
    buf[lowest_pos]     =   (var & 0x00000000000000FF) >> 0 ;
    buf[lowest_pos+1]   =   (var & 0x000000000000FF00) >> 8 ;
    buf[lowest_pos+2]   =   (var & 0x0000000000FF0000) >> 16 ;
    buf[lowest_pos+3]   =   (var & 0x00000000FF000000) >> 24 ;
    buf[lowest_pos+4]   =   (var & 0x000000FF00000000) >> 32 ;
    buf[lowest_pos+5]   =   (var & 0x0000FF0000000000) >> 40 ;
    buf[lowest_pos+6]   =   (var & 0x00FF000000000000) >> 48 ;
    buf[lowest_pos+7]   =   (var & 0xFF00000000000000) >> 56 ;
}

uint64 Uint8ArrtoUint64 (uint8* var, uint32 lowest_pos)
{
    return  (var[lowest_pos+7] << 56) | 
            (var[lowest_pos+6] << 48) |
            (var[lowest_pos+5] << 40) | 
            (var[lowest_pos+4] << 32) |
            (var[lowest_pos+3] << 24) | 
            (var[lowest_pos+2] << 16) |
            (var[lowest_pos+1] << 8)  | 
            (var[lowest_pos]   << 0);
}

我的问题是我拆分或合并 uint64 数字的方式是否出错?我对 uint32 类型做了类似的函数,看起来没问题。


问题是你正在转移uint8 in Uint8ArrtoUint64()功能超过8位。据我所知,这是未定义的行为。无论如何,返回值是 uint8,所以你要“或”八次八uint8数字,最后你只有 uint8 数字,而不是 uint64!你需要将它们投射到uint64首先,然后转移。

uint64 Uint8ArrtoUint64 (uint8* var, uint32 lowest_pos)
{
    return  (((uint64)var[lowest_pos+7]) << 56) | 
            (((uint64)var[lowest_pos+6]) << 48) |
            (((uint64)var[lowest_pos+5]) << 40) | 
            (((uint64)var[lowest_pos+4]) << 32) |
            (((uint64)var[lowest_pos+3]) << 24) | 
            (((uint64)var[lowest_pos+2]) << 16) |
            (((uint64)var[lowest_pos+1]) << 8)  | 
            (((uint64)var[lowest_pos])   << 0);
}

Note: As @interjay 指出 https://stackoverflow.com/questions/25669317/merging-uint8-array-into-uint64-error/25669375?noredirect=1#comment40114832_25669375,对 uint8 进行移位操作实际上会得到 uint32。我对此不太确定,但无论如何最好还是提一下。

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

将 uint8 数组合并到 uint64 错误 的相关文章

  • 为什么libc++的shared_ptr实现使用完整内存屏障而不是宽松内存屏障?

    在boost的实现中shared ptr 它用放松内存排序以增加其引用计数 https github com boostorg smart ptr blob master include boost smart ptr detail sp
  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • 向 ExpandoObject 添加方法时,“关键字 'this' 在静态属性、静态方法或静态字段初始值设定项中无效”

    我尝试向 ExpandoObject 添加一个动态方法 该方法将返回属性 动态添加 给它 但它总是给我错误 我在这里做错了什么吗 using System using System Collections Generic using Sys
  • C++:重写已弃用的虚拟方法时出现弃用警告

    我有一个纯虚拟类 它有一个纯虚拟方法 应该是const 但不幸的是不是 该接口位于库中 并且该类由单独项目中的其他几个类继承 我正在尝试使用这个方法const不会破坏兼容性 至少在一段时间内 但我找不到在非常量方法重载时产生警告的方法 以下
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • 即使手动设置显示环境变量后,WSL Ubuntu 也会显示“错误:无法打开显示”

    我在 WSL Ubuntu 上使用 g 我使用 git 克隆了 GLFW 存储库 使用了ccmake命令配置并生成二进制文件 然后使用make在 build 目录中最终创建 a文件 我安装了所有OpenGL相关的库 usr ld 我不记得我
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • 双精度类型二维多维数组的 pinvoke 编组作为 c# 和 c++ 之间的输入和输出

    我有以下我正在尝试解决的双物质类型的 2d 多维数组的 c 和 c pinvoke 编组 我已经查看了以下热门内容以获得我目前拥有的内容使用双精度数组进行 P Invoke 在 C 和 C 之间编组数据 https stackoverflo
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder

随机推荐

  • 如何使用 Cabal 列出所有已安装的软件包及其版本?

    是否有一个简单的命令 选项可以让您做到这一点 我可以用grep但我想知道是否有内置选项 我们可以简单地这样做 cabal list installed
  • python-social-auth 是否需要会话

    我正在构建一个带有 API 后端 使用 DRF 构建 和 angularjs 客户端的 django 应用程序 我的目标是使用 JWT 代替会话来完全解耦服务器和客户端 我正在尝试整合python 社交 身份验证 https github
  • SQL 中的日期范围交集

    我有一个表 其中每一行都有开始和结束日期时间 这些跨度可以是任意短或长 我想查询具有两个开始和停止日期时间的所有行的交集总持续时间 如何在 MySQL 中做到这一点 或者您是否必须选择与查询开始和停止时间相交的行 然后计算每行的实际重叠并在
  • 更改输入焦点上占位符范围的字体颜色

    我有一个输入字段 里面有一个跨度占位符 我想做的是在单击输入字段时更改占位符的颜色 这是一个 jsFiddle 其中包含我的领域的示例 http jsfiddle net Vbnj2 http jsfiddle net Vbnj2 最好的方
  • 在 C# 中将 Html 转换为 Docx [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 C 中将 html 页面转换为 docx 我该怎么做 我的解决方案使用Html2OpenXml
  • 使用node.js从Firestore中的子集合中删除文档

    我想从 Firebase 子集合中删除文档 我尝试通过以下方式做到这一点 firestore collection categories doc categoryId collection books doc bookId delete 但
  • 为什么插入排序是排序或近似排序数组的最佳算法?

    所以我猜它是因为它只是比较 A k 和 A k 1 并在一次扫描中实现 但它仍然不清楚 有人可以更好地解释一下吗 谢谢 This link http www sorting algorithms com 显示了一个不同类型数据集排序算法的图
  • Blazor - 比较上一个和下一个状态

    我在 Blazor 中有一个学生表 它来自 api 我还收到推送数据来更新学生信息 这基本上是数据库更改后的分数 推送工作正常 分数为正在更新 但我还想将分数更改后表中已更新的字段的背景颜色更改为仅 td 标签的红色几秒钟 我的代码如下 f
  • 在 Bootstrap 面板上调用事件展开

    我正在开发一个流程 我们使用 Bootstrap 风格的手风琴 不是 jQuery UI 手风琴 要求是当用户展开手风琴时调用服务 这是 HTML div class accordion dashboard div class panel
  • 如何清除 WPF WebBrowser 中特定站点的 cookie?

    如何删除特定网站或其页面的身份验证 cookie 目前 如果我通过 WPF WebBrowser 使用 OAuth 2 0 登录 我的登录会话将被保存 但我想在每次关闭应用程序时重置会话 public partial class VKLog
  • 使用 Retrofit2 以表单 urlencoded 请求发送对象列表

    这是我的邮递员请求 我将使用 Retrofit2 Gson 和 RxJava2 发送 POST 请求 这是我的要求 FormUrlEncoded POST Student I m sure the address and name are
  • React Native - 禁用 iOS 键盘上的密码自动填充选项

    在 React Native 中 如何禁用或阻止键盘显示密码自动填充附件视图选项 好像没有房产文本输入处理禁用此选项 React Native TextInput 文档 https facebook github io react nati
  • 连接两个模型以将数据放入视图中

    完成MVC菜鸟警告 2小时学习时间 我在网上查看了很多 MVC3 示例 但没有找到一个简单的示例来完成我想做的事情 我想要做的是两个连接两个模型并将一些数据放入视图中 最明显的是 public partial class Model1 pu
  • 如何在 Three.js 中将 SVG 文件加载到 SVGRenderer 中

    我正在尝试使用SVGRenderer在三个 js中 http trijs org examples svg sandbox http threejs org examples svg sandbox 该示例向您展示了如何动态创建 SVG 元
  • 是否可以将单词附加到现有的 OpenNLP POS 语料库/模型中?

    有没有办法训练现有的 Apache OpenNLP POS Tagger 模型 我需要向模型添加一些特定于我的应用程序的专有名词 当我尝试使用以下命令时 opennlp POSTaggerTrainer type maxent model
  • Google Drive API:以编程方式登录

    我正在开发将文件上传到 Google Drive 所需的应用程序 我从以下链接开始学习 API https developers google com drive ios quickstart https developers google
  • 在 Postgres 中使用 rowversion 实现增量客户端更新

    我是 Postgres 的新手 到目前为止我很喜欢它 我已经对这个问题进行了很多思考 RTFM 已尽我所能 但陷入了死胡同 所以我需要在正确的方向上推动 我正在设计一个数据库 其中每个感兴趣的实体都有一个rowversion从全局序列中获取
  • 如何设置 docker 在每个构建步骤中使用注册表中的缓存

    我有两台带有 docker 的服务器和一台带有我的私人注册表的服务器 我在第一台机器上构建了 Dockerfile 然后我将图像推送到注册表 是否可以使用注册表中的缓存立即在第二台计算机上构建 Dockerfile 如果没有 有没有什么方法
  • Firebase“无法将 java.util.HashMap 类型的值转换为 int”

    在我的代码中的这一行OnDataChange 方法中的ValueEvenListener int latest dataSnapshot getValue Integer class 我得到了一个DatabaseException与错误Fa
  • 将 uint8 数组合并到 uint64 错误

    我正在尝试这段代码 首先将 uint64 数字拆分为 uint8 数组 然后将所述数组合并回原始数字 但是当我尝试打印出号码时out 它似乎返回 uint64 的最大值 uint8 buf 8 uint64 test 12345678901