如何将边界框六进制值转换为整数?

时间:2018-09-26 17:57:14

标签: python int hex converters

这是一个XML文件,我想在其中使用python获取边界框坐标。您会看到有一个BBox属性,它的十六进制字符串包含(x1,y1,x2,y2)。

This is a XML file in which I would like to get the boundary box coordinate using python. You can see that there is a BBox attribute which contains (x1,y1,x2,y2) in hexical string.

我使用python解析边界框信息,但问题是如何将这16位六进制值转换为人类可以理解的整数值,我们将其视为对象边界坐标值。

enter image description here

我使用了int('hex str', 16),但是它给出了一个很大的整数值,这显然不像是800x1200尺寸图像的坐标值。在这种情况下,BBox的第一个值为“ 4074145c00000005”,转换后我得到4644359501095370757。

请给我一个解决方案,如何将边界框坐标转换为人类可以理解的整数值。

1 个答案:

答案 0 :(得分:0)

最后,我得到了将这个16位十六进制字符串转换为人类可以理解的十进制/整数值的解决方案。此值表示使用enter link description here中说明的IEEE 784标准转换。这个16位十六进制值用于表示浮点转换,以更精确地定位坐标。

tab = ['0000000000000000', '408a500000000000', '4082980000000000', '0000000000000000']
int_val = [int(struct.unpack('!d', str(t).decode('hex'))[0]) for t in tab]
print "convert to int : ", int_val

函数struct.unpack(format, buffer)用于转换具有两个参数的函数。第一个参数用于格式!d,其中d表示C中为Double或python中为float,并且!符号用于指示字节顺序。@, =, <, >, !用于表示5个字节顺序我需要转换哪种格式。