Проблемы с python hex () - PullRequest
       7

Проблемы с python hex ()

0 голосов
/ 30 августа 2018

У меня есть файл json следующим образом

{
   "devices"  :[
                 {
                 "Manufacturer name": "Sony",
                 "vendor_id":"8087" ,
                 "product_id" : "07da"
                 },
                 {
                 "Manufacturer name": "Sandisk",
                 "vendor_id": "1d6b",
                 "product_id" : "0002"
                 },
                 {
                 "Manufacturer name": "Chicony Electronics",
                 "vendor_id": "04f2",
                 "product_id" : "b381"
                 }
               ]

}

Этот файл json содержит производителя и идентификатор продукта USB-устройств, подключенных к моему ноутбуку. Я проверяю, подключено ли USB-устройство к ноутбуку или нет, используя этот файл JSON. Поставщик и идентификатор продукта указаны в hex. Поскольку json не может использовать hex, я записал эти значения в строковом формате. Я на самом деле использую pyusb модуль Python для проверки подключения устройств, как следует

import usb.core
def get_hex(hex_str):
    hex_int = int(hex_str, 16)
    return hex(hex_int)

vendor_id = get_hex("8087")
product_id = get_hex("07da")
dev = usb.core.find(idVendor=vendor_id, idProduct=product_id)

if dev is None:
    print "Disconnected"
else:
    print "Connected"

Но когда я запускаю этот код, я получаю сообщение для печати как "Disconnected" Здесь на самом деле проблема в том, что usb.core.find() функция нуждается в значении в int, но значение get_hex() возвращает функцию string. Однажды измените строку dev = usb.core.find(idVendor=vendor_id, idProduct=product_id) в приведенном выше коде на dev = usb.core.find(idVendor=0x8087, idProduct=0x07da). Приведенный выше код работает правильно. Пожалуйста, дайте мне знать, как вернуть значение из get_hex() в int.

1 Ответ

0 голосов
/ 30 августа 2018

Проблема в том, что вы конвертируете шестнадцатеричную строку в int, а затем обратно в шестнадцатеричную строку. Просто вернитесь после преобразования в int. И было бы лучше переименовать функцию как get_int, так как вы просто конвертируете ее в int

def get_int(hex_str):
    return int(hex_str, 16)

vendor_id = get_int("8087")
product_id = get_int("07da")
dev = usb.core.find(idVendor=vendor_id, idProduct=product_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...