我正在使用文本可读文件,这些文件是从使用类似自定义XML结构的客户端系统导出的。我需要能够从大量这些文件中解析和提取数据,而无需记录它们的结构。
我主要解决了文件结构问题,但是我对如何编码值感到困惑。我可以在系统中手动查找正确的值作为比较。一些例子:
Export Data = System Value
D411E848 = 500000
D40F86A = 100000
D41086A = 200000
我很确定领先的“D”是一个标记,表示该字段是十进制或双精度值。原因是所有数字字段以“D”开头,所有文本字段以“S”开头。以下“4”也可能是字段数据类型的一部分,因为所有数字字段似乎都以“D4”开头。
但是,在导出数据值的任何组合上从十六进制转换为十进制都不会产生正确的结果。
如何进行转换?
额外的数据映射:
Value Export File
1 D3FF
2 D4
3 D4008
4 D401
5 D4014
6 D4018
7 D401C
8 D402
9 D4022
10 D4024
100 D4059
1000 D408F4
100000 D40F86A
500000 D411E848
500001 D411E8484
500002 D411E8488
500003 D411E848C
500004 D411E849
500005 D411E8494
500006 D411E8498
500007 D411E849C
500008 D411E84A
500009 D411E84A4
500010 D411E84A8
答案 0 :(得分:6)
看起来像正常但被截断的IEEE 754 64-bit (double precision) number。
0x408F400000000000 = 1000
408F4 (truncated)
D408F4 (prefixed with D)
0x411E848000000000 = 500000
411E848 (truncated)
D411E848 (prefixed with D)
尝试使用以下网站将其转换为参考:http://www.binaryconvert.com/result_double.html?decimal=053048048048048048
答案 1 :(得分:1)
我可以从2
开始看到模式。以下是从自定义格式中获取小数值的步骤。
D4
。LEN() < 3
填充0
s以获得至少3个字母长字符串1
添加到第3点的数字。POW(16, LEN(Y))
,其中Y
是第5点的文字。X / Y
,其中X
是第6点的数字,Y
是第7点的文字。POW(2, X)*(1 + Y)
,X
来自第4点,Y
来自第9点。它可能看起来很复杂,但实际上非常简单。
我已经为您的示例输入创建了Excel Web App spreadsheat以及所有这些步骤的结果:http://sdrv.ms/1bO0wnz