Как установить срез для обратного шестнадцатеричного

#python #python-3.x #hex #slice

Вопрос:

Нужна помощь с кусочком гекса, чтобы повернуть вспять

У меня есть

                 b = str(valueh)
                c = str(valueh)[-1:1:-1]
                if all(x in string.hexdigits for x in c):
                    d = int(c, 16)
                    print(hex(d))
 

например, для значения os 0x123456 это печатает 0x654321, и мне нужно, чтобы оно печатало 0x563412.

Кто-нибудь может мне помочь?

Комментарии:

1. a = 0x123456; b = int.from_bytes(a.to_bytes(a.bit_length() // 8 1, "big"), "little")

2. привет, спасибо, но это возвращает 5649426

3. … что является десятичной формой числа. Попробуйте hex(5649426) 😉

4. ХА-ХА-ха, потрясающе 🙂 спасибо

5. a=int(значение, база=16)

Ответ №1:

Этот код допускает строки с префиксом 0x или без него, а также строки с нечетным числом символов:-

 def rev(s):
    if not s:
        return s
    if (prefix := s[0:2] if s.lower().startswith('0x') else ''):
        sl = list(s[2:])
    else:
        sl = list(s)
    if (j := len(sl) - 2) >= 2:
        i = 0
        while True:
            sl[i:i   2], sl[j:j   2] = sl[j:j   2], sl[i:i   2]
            if (i := i   2) >= (j := j - 2):
                break
    return prefix   ''.join(sl)


print(rev('0x123456'))