当没有数据类型可以容纳完整数字时将十六进制转换为十进制

2023-12-08

我正在使用 C 语言的 PIC 微处理器。它是 16F,因此它不能保存大于 32 位的整数(无符号int32是可用的最大数据大小)

我从阅读器处收到一个 5 字节的 ID 代码。为了传输它,我必须逐位编码为 BCD。我无法将其冲刺为字符串,因为它大于数据大小,并且无法处理它。我无法划分它,因为没有为它定义任何操作。

我无法找出任何可能的解决方案,以前有人处理过这个问题吗?

EDIT:

我收到一系列 5 个字节的数字:

FF-FF-FF-FF-FF

我需要将其转换为十进制

0123456789012

(13位,十进制长度256^5)通过RS232发送。第二个函数(获取 ASCII 并发送)我已经可以使用它了,但我需要完整数字的字符串表示形式,然后才能对其执行任何操作。


假设您有 32 位算术:2**24 = 16777216,因此将 x 作为最高有效的 2 个字节,将 y 作为最低有效的 3 个字节:

  (16777216 * x + y) / 1000 
= (16777000 * x + 216 * x + y) / 1000
= 16777 * x + (216 * x + y) / 1000

第一项可以用 32 位计算而不会溢出(因为x < 2**16)。 第二项也可以在没有溢出的情况下计算(因为x < 2**16 and y < 2**24).

这基本上是基数的长除法2**24一个 2 位数的值,但预先计算的项已知除数为 1000。选择 1000 是因为它是大于 10 的最小幂2**8.

因此,首先计算最低三位数字,使用以下事实(2**32) % 1000 == 296。所以这次我们将x作为最高字节,y作为低4字节

((2**32) * x + y) % 1000 = ((2**32) * x) % 1000 + y % 1000 (modulo 1000)
                         = (296 * x) % 1000 + y % 1000     (modulo 1000)
((2**32) * x + y) % 1000 = ((296 * x) % 1000 + y % 1000) % 1000

然后使用上面的公式将原始数字除以 1000。然后您就可以安全地进入 32 位领域,并可以使用正常循环生成剩余的数字。

顺便说一句,如果我是你,我会检查结果:我还没有对此进行测试,并且可能我在某个地方犯了错误。应该很容易与 PC 上使用常规方法在 64 位整数中完成的 bcd 转换结果进行比较。

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

当没有数据类型可以容纳完整数字时将十六进制转换为十进制 的相关文章

  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr

随机推荐

  • 如何检测 Highcharts 图表中点的双击或长按?

    Highcharts 提供了检测图表点点击的机会 但是有可能吗 检测其他事件 例如双击或鼠标按下事件 提前致谢 每个组件只支持某些事件 例如图表组件会检测addSeries click load redraw and selection 我
  • 索引枚举的值,而不是字符串

    是否可以使用 Solrnet 索引 Enum 的值而不是其字符串表示形式 假设我必须遵循以下枚举 Serializable Flags public enum Gender Male 0 Female 1 并将 solr 属性添加到Gend
  • 使用react-router-v4对路由进行身份验证

    我正在尝试写Authentication检查我的DashBoard 但函数本身没有被调用 谁能给我一些解决方案吗 我正在使用 ReactJs 进行开发 这是路线部分
  • 我收到错误“DELETE 语句与 REFERENCE 约束冲突”

    我尝试用外键截断表并收到消息 无法截断表 因为它被 FOREIGN KEY 约束引用 我阅读了很多有关该问题的文献 并认为我通过使用删除找到了解决方案 DELETE FROM table name DBCC CHECKIDENT table
  • 没有 Boost.Serialization 的序列化

    我正在尝试为我的代码实现一个简单的序列化 反序列化方法 以便能够使用 MPI 通过网络传递对象 在理想的世界中我会使用Boost Serialization and Boost MPI为此 但它们没有安装在我有权访问的某些集群上 因此我正在
  • 需要 Microsoft Visual C++ 10.0(无法找到 vcvarsall.bat)

    我尝试使用以下命令在 Windows 8 1 上安装 ephem 模块 pip install ephem 但我收到此错误 Microsoft Visual C 10 0 is required Unable to find vcvarsa
  • Knockout JS 映射插件混乱

    我很困惑在使用映射插件时应该何时何地声明我的 viewModel 这是我的 json 文件 members memberid 001 membername Jason memberid 002 membername Bob 这是 html
  • 如何使用 hibernate 和 Legacy 数据库修剪 char 字段 pojo 中的空格

    我的表的列为 char 5 无法将其更改为 varchar 5 因此 当我使用 hibernateTemplate 从表中获取值时 它会返回带有实际的单个字母值的添加空格 客户修复是使用 trim 方法检查 NPE 但是我们是否有提供的方法
  • SQL 迭代所有表

    我正在运行以下代码以从具有特定列的所有表中提取所有相关行 外层IF应该检查该迭代的表中是否存在该列 如果没有 它应该完成该迭代并移至下一个表 如果表中有GCRecord列 然后应该检查该表是否会返回任何记录 如果没有要返回的记录 则应结束该
  • data.table 中 cumsum 的平均版本(累积平均值)

    我有一些数据 library data table set seed 42 dat lt data table t 1 6 group rep 1 2 each 3 val runif 6 0 1 gt dat t group val 1
  • 如何在c中打印内存位

    我正在学习数字在内存中的表示方式 我想知道如何在内存中打印某些 int 和 float 变量的实际表示形式 二进制或十六进制 例如 我想看看当添加或减去这些数字导致溢出时会发生什么情况 如何访问内存并打印它 您需要将指向相关变量的指针分配给
  • Java 在文本区域右侧显示文本

    我遇到的问题ComponentOrientation RIGHT TO LEFT是 或 等字符或者 显示在左侧 我只需要从右到左绘制文本 但使用标准 西方 英语从左到右的文本字符表示法 如果不手动渲染文本 这可能吗 我无法生成您的问题 您可
  • 将 Jackson 注释添加到 swagger 生成的类

    我正在使用 swagger 来定义与我的网络服务器的合同 在 swagger 文件中 我定义了 REST 端点和请求 响应对象 我想添加注释 JsonInclude Include NON NULL 到我的招摇班级的一个领域 swagger
  • 动态包含安全

    有没有什么方法可以安全地包含页面而不将它们全部放入数组中 if preg match a z0 9 GET page page GET page php tpl GET page html if file exists page inclu
  • 如何使用 AJAX 进行重定向?

    我有以下代码 function get login hideshow loading2 1 error 0 ajax type POST url The URL data logins serialize dataType json suc
  • 即使用户强制关闭服务,如何自动重新启动服务?

    我希望服务在我的应用程序中始终运行 所以我想重新启动它 即使它被用户强制关闭 肯定有办法做到这一点 就像 Facebook 等应用程序正在做的那样 这不是使用推送通知完成的 即使互联网关闭 Facebook 也会重新启动其服务 首先 它是真
  • 绘制靠近折线的线

    我有一个三角形作为折线 我想绘制一个高度 我发出命令 line or line 正确的点 但 AutoCAD 绘制从顶点到相邻顶点的线 不仅在 AutoLISP 中 AutoCAD 也不允许我在多段线中绘制从顶点到边的中间的线 我怎样才能做
  • 使用 fuzzywuzzy 在数据框中创建一列匹配结果

    我遇到了使用 FuzzyWuzzy 库将所有 结果存储在数据框列中的挑战 我猜它可能需要循环 我一整天都在摸索这个问题 现在我想看看你们谁能帮我解决问题 会超级有帮助的 作为我想做的一个例子 这里有 2 个数据框表 主表 ID ITEM 1
  • 将数据附加到 S3 对象

    假设我有一台机器 我希望能够将其写入存储在 S3 存储桶上的某个日志文件 因此 机器需要具有对该存储桶的写入能力 但是 我不希望它能够覆盖或删除该存储桶中的任何文件 包括我希望其写入的文件 所以基本上 我希望我的机器能够仅将数据附加到该日志
  • 当没有数据类型可以容纳完整数字时将十六进制转换为十进制

    我正在使用 C 语言的 PIC 微处理器 它是 16F 因此它不能保存大于 32 位的整数 无符号int32是可用的最大数据大小 我从阅读器处收到一个 5 字节的 ID 代码 为了传输它 我必须逐位编码为 BCD 我无法将其冲刺为字符串 因