我正在处理一个xml文件,其中数字用不同的方法编码。标题写着"xml版本="1.0"编码="utf-8",但我发现不仅使用utf8。下面的字符串我相信使用了相同的编码方法。但是我不知道使用的方法。请注意以下字符串是括号内相应的小数和单位。字符串可以包含,也可以不包含。
40413CA4FCA42AED 5.000 (ksi)
40A2C00000000000 0.15 (kcf)
40A2200000000000 0.145 (kcf)
40DB627A7915AB7E 4067.135889 (ksi)
3FC999999999999A 0.2 (no unit)
400D99D5D4C224D1 0.5366563 (ksi)
下面的是我用来解释这些字符串的python代码。6个弦中,我选对了一个0.2
import struct
# define double_to_hex (or float_to_hex)
def double_to_hex(f):
return hex(struct.unpack('<Q', struct.pack('<d', f))[0])
print(double_to_hex(0.5366563))
有什么建议吗?
我猜是单位不匹配。
import struct
import pandas as pd
import io
mydata = '''hxstr decval unit
40413CA4FCA42AED 5.000 (ksi)
40A2C00000000000 0.15 (kcf)
40A2200000000000 0.145 (kcf)
40DB627A7915AB7E 4067.135889 (ksi)
3FC999999999999A 0.2 (nou)
400D99D5D4C224D1 0.5366563 (ksi)
'''
df = pd.read_csv( io.StringIO(mydata), sep=" ")
for index, row in df.iterrows():
print(
row.hxstr,
row.unit,
struct.unpack(
'>d',
bytes.fromhex(row.hxstr))[0] / float(row.decval))
结果对于相同的单位显示大致相同的比率:
40413CA4FCA42AED (ksi) 6.894757
40A2C00000000000 (kcf) 16000.0
40A2200000000000 (kcf) 16000.000000000002
40DB627A7915AB7E (ksi) 6.89475699994749
3FC999999999999A (nou) 1.0
400D99D5D4C224D1 (ksi) 6.894757187574625
这里
ksi的6.894757
比率类似于以下转换(假设ksi表示千磅每平方英寸): 1 ksi = 6.8947572932 MPa(兆帕斯卡),- 没有单元的
1.0
比值似乎是正确的,但是 - kcf的
16000.0
比率I can't identify…