C++ 十六进制解析

2024-04-24

我想知道如何将十六进制字符串转换为人类可读的字符串(如果这有意义),这将是我第一次真正遇到十六进制值,所以我仍在学习它们以及如何管理它们。

我有一个程序正在从包含原始数据包数据(十六进制)的文件中读取数据,我需要解析这些信息,以便人类可读。

我需要做的一个例子就是这个网站所做的事情http://home2.paulschou.net/tools/xlate/ http://home2.paulschou.net/tools/xlate/您可以在其中输入十六进制并将其转换为文本。


取自C++ 字符串工具包库 (StrTk) http://www.partow.net/programming/strtk/index.html库,以下应该足够了。注意out应该指向一块std::distance(begin,end)一半大小的内存,并且[begin,end)范围内的值是0-9A-F或0-9a-f

inline bool convert_hex_to_bin(const unsigned char* begin, 
                               const unsigned char* end, 
                               unsigned char* out)
    {
       if (std::distance(begin,end) % 2)
          return false;
       static const std::size_t symbol_count = 256;
       static const unsigned char hex_to_bin[symbol_count] = {
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x00 - 0x07
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x08 - 0x0F
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x10 - 0x17
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x18 - 0x1F
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x20 - 0x27
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x28 - 0x2F
                    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, // 0x30 - 0x37
                    0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x38 - 0x3F
                    0x00, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, // 0x40 - 0x47
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x48 - 0x4F
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x50 - 0x57
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x58 - 0x5F
                    0x00, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, // 0x60 - 0x67
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x68 - 0x6F
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x70 - 0x77
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x78 - 0x7F
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x80 - 0x87
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x88 - 0x8F
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x90 - 0x97
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x98 - 0x9F
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xA0 - 0xA7
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xA8 - 0xAF
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xB0 - 0xB7
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xB8 - 0xBF
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xC0 - 0xC7
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xC8 - 0xCF
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD0 - 0xD7
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD8 - 0xDF
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xE0 - 0xE7
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xE8 - 0xEF
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xF0 - 0xF7
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  // 0xF8 - 0xFF
                  };

       const unsigned char* itr = begin;
       while (end != itr)
       {
          (*out)  = static_cast<unsigned char>(hex_to_bin[*(itr++)] << 4);
          (*out) |= static_cast<unsigned char>(hex_to_bin[*(itr++)]     );
          ++out;
       }
       return true;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 十六进制解析 的相关文章

随机推荐

  • ejabberd 支持离线文件传输吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在开发 XMPP 客户端 使用 ejabberd 作为服务器 我的问题是如何支持离线文件传输 我只想对图像文件进行离线文件传输 例如 即使约翰离线
  • WordPress:本地主机上的自定义默认头像?

    我正在尝试在functions php 中向WordPress 添加自定义默认头像 但该图像未显示在 设置 讨论 或网站上的其他位置 该代码有效 因为添加了带有自定义字段名称的新单选字段 但图像不会显示 头像不显示是因为我使用的是本地主机吗
  • ASP.NET 在当前上下文中不存在

    我面临一个问题 我使用了 dropdownList 控件 ID 是drpDownCountries在 ASP NET 项目中 dropdownlist控件放置在页面上 在C 的代码隐藏文件中 同时键入控件名称drpDownCountries
  • 将 XML 作为参数传递给 Web 服务

    In an answer https stackoverflow com questions 2597056 is there an xmlencode xmldecode for net 2597262 2597262对于另一个问题 有人
  • 生成器理解如何工作?

    生成器理解有什么作用 它是如何工作的 我找不到有关它的教程 你了解列表推导式吗 如果是这样 生成器表达式就像一个列表理解 但它不是查找您感兴趣的所有项目并将它们打包到列表中 而是等待 并从表达式中逐一生成每个项目 gt gt gt my l
  • 我如何选择这个跨度元素?

    我刚刚开始使用 Selenium 现在需要选择这个元素 span class close Matrices span 这行代码返回零个元素 所以我猜它不是正确的 ReadOnlyCollection
  • Criteria.DISTINCT_ROOT_ENTITY 不会阻止重复的对象

    我有以下 dao 方法 Override public List
  • 玩法:如何实现动作组合

    鉴于以下情况ActionBuilder实施 class SignedRequest A request Request A extends WrappedRequest A request object SignedAction exten
  • 创建具有通用返回类型的 FlinkSQL UDF

    我想定义函数MAX BY接受类型值T和类型的订购参数Number并根据排序从窗口返回最大元素 类型为T 我试过了 public class MaxBy
  • 在哪里可以找到所有谷歌地图 v3 事件列表?

    正如标题 我搜索了官方谷歌地图 API 参考和其他网站 我找不到完整可用事件的文档列表 请给我一个提示来获取所有 v3 事件 多谢 API参考 https developers google com maps documentation j
  • JavaScript 获取当前应用于元素的样式列表

    List only渲染的样式 而不是未应用的任意样式 我尝试了很多方法来将样式应用于元素 但结果都是空白 请不要引用getComputedStyle除非你能解决垃圾退货问题 否则这是一个解决方案 主要问题是window getCompute
  • 有没有办法让 gpg 签署所有以前的提交?

    正如标题所示 我正在寻找一种方法来 gpg 签署存储库中我以前的所有提交 最好不要为每次提交输入密码 我的方法是 git rebase exec git commit amend no edit n S i 8fd7b22 所有提交从下一个
  • python 课堂上有太多自我

    我正在学习 Python OOP 并尝试将 Java 类转换为 Python 类 请参阅此 PDF 中的第 15 页了解 Java 代码 google 文档link https docs google com open id 1eqzajO
  • Flutter 项目中任务“:app:processDebugResources”执行失败

    我从 7 月份开始重新开始 Flutter 项目的工作 并且遇到了大量的依赖问题 我正在慢慢解决这些问题 然而 这个我就是无法摆脱 Launching lib main dart on sdk gphone x86 in debug mod
  • imageView 中的圆角[重复]

    这个问题在这里已经有答案了 这是我的 xml 布局
  • set 中的哈希表在 python 中如何工作?

    据我所知 set在python中通过哈希表来实现O 1 查找复杂度 虽然它是哈希表 但其中的每个条目set必须是可散列的 或不可变的 所以这种和平的代码引发了异常 gt gt gt dict Traceback most recent ca
  • Google 标签管理器不会将事件推送到 Android 上的数据层

    我正在尝试在我的 Android 应用程序中实现标签管理器 如下本指南 https developers google com tag manager android v4 但由于某种原因我无法将事件推送到数据层 Override prot
  • hibernate中的实体和值类型

    对象级别的实体类型和值类型有什么区别 我知道实体将有一个 id 但值不会 但是为什么我们需要不同的方法来映射实体与值类型 这样做是为了让 hibernate 可以对值类型应用任何优化吗 实体已经定义了其持久保存的表 因此 当实体 A 中有
  • WooCommerce - 在哪里可以编辑由挂钩生成的 HTML?

    我是 WooCommerce 新手 无论如何 我想创建自己的主题 所以我遵循指南并将核心模板文件复制到 mywordpresstheme woocommerce 一切都很好 我正在编辑模板 效果很好 然而 WooCommerce 中的挂钩和
  • C++ 十六进制解析

    我想知道如何将十六进制字符串转换为人类可读的字符串 如果这有意义 这将是我第一次真正遇到十六进制值 所以我仍在学习它们以及如何管理它们 我有一个程序正在从包含原始数据包数据 十六进制 的文件中读取数据 我需要解析这些信息 以便人类可读 我需