CODeRUS
Авг. 17, 2008 19:25:10
перевернул интернет в поиске ответа на данный вопрос.
нашел лишь одну реализацию:
def hex2dec(s):
“”“return the integer value of a hexadecimal string s”“”
return int(s, 16)
но она работает только при длинне НЕХа до 7ми символов включительно..
может что подскажите?
crchemist
Авг. 17, 2008 20:22:59
CODeRUS
но она работает только при длинне НЕХа до 7ми символов включительно..
в мене працює для всіх чисел
>>> int('FFFFFFFFFFFFFFFF', 16)
18446744073709551615L
>>>
Тільки повертає для більших чисел long замість int. Це залежить не від довжини стрічки а від величини числа - для типу інт- це 2147483599 .
ось стрічка на багато символів і всьо гут
>>> int('00000000000011111111', 16)
286331153
>>>
Ще є long
CODeRUS
Авг. 18, 2008 04:48:09
ну да, я так и думал. Просто дело в том, что у меня Python for S60 1.4.2 Final (Версия для Symbian смартфонов :-[)
igor.kaist
Авг. 18, 2008 09:41:43
И в чем проблема с портом для смартов? Сейчас проверил, все работает (кстати, давно пора обновиться до 1.4.4). Питон, он и в африке питон. А симбиан, это тоже 32 битная система
CODeRUS
Авг. 18, 2008 12:24:09
обновился. проблема осталась
7 знаков переводит, а 8 уже нет.
evgenyl
Авг. 18, 2008 12:28:33
скажи а, что ты потом хочеш с этим числом делать ?
если просто куданить передать то можно в сыром формате raw='0123456789ABSDEF'.decode('hex')
а hex2dec - она для обычных чисел 4 байта и всё если не ошибаюсь
evgenyl
Авг. 18, 2008 12:39:50
ну или решить в лоб проблему :)
hex_dig='0123456789ABCDEF'
h='AC987FF00123AA'
hi=0
for i in h: hi=(hi<<4)+hex_dig.find(i)
print hi
CODeRUS
Авг. 18, 2008 12:54:50
с данными… перевести вводимый hex в dec (int) для использования в математической функции
ps^ это:
hex_dig='0123456789ABCDEF'
h='AC987FF00123AA'
hi=0
for i in h: hi=(hi<<4)+hex_dig.find(i)
print hi
выдает правильный результат при длине hex-a до 7ми символов. походу это и есть та int(… ) функция?
evgenyl
Авг. 18, 2008 13:13:33
тогда первый метод не пойдёт
вероятно это особенность работы питона под Symbian, точнее ограничение платформы
ты не сможеш использовать HEX числа больше чем 3,5 байта, последние 4 бита нельзя записать, ИМХО потому что в последнем бите хранится знаковый флаг, возможно ещё чтото
так что ограничивай свои потребности
evgenyl
Авг. 18, 2008 13:15:15
а что выдает при 8 ми символах ? отрицательное число ?