Как преобразовать значение шестнадцатеричного прямоугольника в целое число? - PullRequest
0 голосов
/ 26 сентября 2018

Это 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, но проблема в том, как я могу преобразовать это шестнадцатизначное шестнадцатеричное значение в читаемое человеком целочисленное значение, которое нам знакомо как значение координат границы объекта.

enter image description here

Я использовал int('hex str', 16), но он дает большое целочисленное значение, которое явно не похоже на значение координаты изображения размером 800x1200.В этом случае первое значение BBox было «4074145c00000005», и я получил после преобразования 4644359501095370757.

Пожалуйста, дайте мне решение, как преобразовать эту координату граничного блока в понятное человеку целое значение.

1 Ответ

0 голосов
/ 02 октября 2018

Наконец-то я получил решение преобразовать 16-значную шестнадцатеричную строку в понятное человеку десятичное / целое значение.Это представление значения использует стандартное преобразование IEEE 784, которое объяснено в , введите описание ссылки здесь .Это шестнадцатизначное шестнадцатеричное значение, используемое для представления преобразования с плавающей точкой для более точного координатного положения.

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 означает Double в C или число с плавающей запятой в python и ! знак, используемый для указания порядка байтов. Существует 5 байтов @, =, <, >, !, чтобы указать, какой формат мне нужно преобразовать.

...