我现在正在查看视频游戏数据文件中的一些十六进制字符串。其结构如下:
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...
(空格分隔)
- 将数据复制到 A1。
- 在B1中输入:
=MID($A$1, ROW(B1)*12-11, 11)
. 将其复制到 B2:B20。 - 在 C1 中输入:
=MID(B1,10,2)&MID(B1,7,2)
. 将其复制到 C2:C20。 - (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