如何将单行十六进制数字转换为多行 Excel 表?

如何将单行十六进制数字转换为多行 Excel 表?

我现在正在查看视频游戏数据文件中的一些十六进制字符串。其结构如下:

XX 01 YY YY (then repeats)

在哪里:

XX is the item's cost
01 is unknown (it won't matter)
YY YY is the item's ID.

例如:

28 01 AF 01

...将描述一件价值 40 金币(十六进制为 28)的物品,其 ID 为“01AF”(我有一个游戏中所有 ID/物品的参考列表)。

我想将其放入包含以下列的 Excel 表中:

| ItemID | Cost |

如果有如下内容,超级用户将如何完成此任务: 替代文本

答案1

编辑:根据 Arjan 的评论改进了解决方案)

这是一个简单但不完善的 MS Excel 解决方案。

假设:数据格式为28 01 AF 01 XX XX XX XX YY YY YY YY...(空格分隔)

  1. 将数据复制到 A1。
  2. 在B1中输入:=MID($A$1, ROW(B1)*12-11, 11). 将其复制到 B2:B20。
  3. 在 C1 中输入:=MID(B1,10,2)&MID(B1,7,2). 将其复制到 C2:C20。
  4. (a)在 D1 中输入:=HEX2DEC(LEFT(B1,2))。将其复制到 D2:D20。
    (b)如果#NAME?出现错误,则在 D1 中输入以下内容。将其复制到 D2:D20。

=IF(CODE(LEFT(B1,1))>64,CODE(LEFT(B1,1))-55,LEFT(B1,1))*16 +IF(CODE(MID(B1,2,1))>64,CODE(MID(B1,2,1))-55,MID(B1,2,1))

(解决方案 (b) 的另一个假设:所有十六进制值都以大写字母表示)

C 列和 D 列就是您所需要的。


解释

乙:乙将数据(A1)分成不同的行。

C1只是从 B1 中提取位置 {10, 11, 7, 8} 的字符。

D1提取 A1 中的前 2 个字符,然后将其从十六进制 (HEX) 转换为十进制 (DEC)。


笔记:分析工具库插件HEX2DEC()(a) 中必需的。如果#NAME?出现错误,则表示不支持该功能。在这种情况下,(b) 中的 hack 将有助于从 HEX 转换为 DEC。

CODE()获取字符的 ASCII 码。对于 ABCDEF,其 ASCII 码为 {65,66,67,68,69,70}。CODE()-55则返回 {10,11,12,13,14,15}。

答案2

这种方法虽然有点混乱,但是却很有效。

将文件复制到 MS Word 中。
将光标放在文件开头。
编写一个宏,将光标向右移动 12 个位置,然后输入换行符(返回)
。以文本格式保存文件,确保已打开换行符。
在 Excel 中打开文件,确保将单元格中的输出选择为文本而不是常规(否则您将使用前导 0)

然后只需添加标题并删除您不想要/不需要的列。瞧。

也许有更多 VB 知识的人可以在这里帮助您,语法与 C++ 完全不同,而且我今天有点时间紧迫。

我的代码是:

(Pseudocode) - While Not End of File

    Selection.MoveRight Unit:=wdCharacter, Count:=12
    Selection.TypeParagraph
Wend

相关内容