Вопрос по types, python – Изменение строки в байтовый тип в Python 2.7

11

В Python 3.2 я могу легко изменить тип объекта. Например :

x=0
print(type (x))
x=bytes(0)
print(type (x))

это даст мне это:

<class 'int'>
<class 'bytes'>

Но в Python 2.7 кажется, что я не могу использовать тот же способ, чтобы сделать это. Если я делаю тот же код, он дает мне это:

<type 'int'>
<type 'str'>

Что я могу сделать, чтобы изменить тип в тип байтов?

Ответ Мартина содержит соответствующую информацию. The Unfun Cat

Ваш Ответ

4   ответа
13

Вы также столкнулись с одним из фундаментальных отличий между python 2.x и 3.x; сильно упростил тип 2.xunicode заменилstr тип, который сам был переименован вbytes, Это работает в вашем коде, так как добавлены более поздние версии Python 2bytes как псевдоним дляstr чтобы облегчить написание кода, который работает под обеими версиями.

Другими словами, ваш код работает как положено.

Error: User Rate Limit ExceededstrError: User Rate Limit ExceededisError: User Rate Limit ExceededbytesError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Smith
4

bytes это просто псевдоним дляstrтак что все работает как положено. Кроме того, вы не меняете тип объектов здесь & # x2013; вы просто привязываете имяx на другой объект.

Error: User Rate Limit Exceeded Smith
8

Вы не можете & t; нет такого типа, как 'байты'; в Python 2.7.

Из документации Python 2.7 (5.6 Типы последовательностей): & quot; Существует семь типов последовательностей: строки, строки Unicode, списки, кортежи, байтовые массивы, буферы и объекты xrange. & quot;

Из документации Python 3.2 (5.6 Типы последовательностей): & quot; Существует шесть типов последовательностей: строки, байтовые последовательности (объекты байтов), байтовые массивы (объекты байтовых массивов), списки, кортежи и объекты диапазона. & quot;

>>> str is bytes ... TrueError: User Rate Limit Exceededstr!
0

что вам нужно, но когда мне нужно было получить десятичное значение байта d8 (это был байт, дающий смещение в файле), я сделал:

a = (data[-1:])          # the variable 'data' holds 60 bytes from a PE file, I needed the last byte
                         #so now a == '\xd8'  , a string
b = str(a.encode('hex')) # which makes b == 'd8' , again a string
c = '0x' + b             # c == '0xd8' , again a string
int_value = int(c,16)    # giving me my desired offset in decimal: 216

                         #I hope this can help someone stuck in my situation

Похожие вопросы