Приведение типов в Python

Мне нужно преобразовать строки в Python в другие типы, такие как беззнаковые и подписанные 8, 16, 32 и 64-битные целые числа, числа с двойной точностью, числа с плавающей запятой и строки.

Как я могу это сделать?

Возможный дубликат преобразование строки Unicode в Python

ian5v 01.05.2016 09:25
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
24
1
98 046
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Python имеет только один тип int. Чтобы преобразовать строку в int, используйте int() следующим образом:

>>> str = '123'
>>> num = int(str)
>>> num
123

Редактировать: Также для преобразования в число с плавающей запятой используйте float() точно так же.

Я считаю, что то же самое верно и для всех других типов питонов. Мне кажется, что кто-то хочет C, а не Python

UnkwnTech 22.12.2008 07:43
Ответ принят как подходящий

Вы можете преобразовать строку в 32-битное целое число со знаком с помощью функции int:

str = "1234"
i = int(str)  // i is a 32-bit integer

Если строка не представляет собой целое число, вы получите исключение ValueError. Однако обратите внимание, что если строка действительно представляет собой целое число, но это целое число не вписывается в 32-битное подписанное int, то вместо этого вы фактически получите объект типа long.

Затем вы можете преобразовать его в другую ширину и подписи с помощью простой математики:

s8 = (i + 2**7) % 2**8 - 2**7      // convert to signed 8-bit
u8 = i % 2**8                      // convert to unsigned 8-bit
s16 = (i + 2**15) % 2**16 - 2**15  // convert to signed 16-bit
u16 = i % 2**16                    // convert to unsigned 16-bit
s32 = (i + 2**31) % 2**32 - 2**31  // convert to signed 32-bit
u32 = i % 2**32                    // convert to unsigned 32-bit
s64 = (i + 2**63) % 2**64 - 2**63  // convert to signed 64-bit
u64 = i % 2**64                    // convert to unsigned 64-bit

Вы можете преобразовать строки в числа с плавающей запятой с помощью функции float:

f = float("3.14159")

Поплавки Python - это то, что другие языки называют double, то есть они 64-битные. В Python нет 32-битных чисел с плавающей запятой.

Интересно, насколько разные могут быть приняты ответы на один и тот же вопрос stackoverflow.com/questions/374318/…

jfs 22.12.2008 08:22

Хех. Сегодня утром я потратил целую вечность на отладку какого-то кода, и это был преступник: D

Dominic Bou-Samra 14.12.2010 10:02

@AdamRosenfield Не могли бы вы объяснить математику преобразования в целое число со знаком? Например, для 32-битного целого числа, как я думаю: получить 32-битное целое число без знака, а затем взять десятичное значение его представления дополнения до двух, но я не уверен, как это переводится в (i + 2**31) % 2**32 - 2**31

cozos 06.07.2018 05:22

Следующие типы - по большей части - вообще не существуют в Python. В Python строки преобразуются в целые, длинные или числа с плавающей запятой, потому что это все, что есть.

Вы просите о преобразованиях, которые изначально не имеют отношения к Python. Вот список типов, которые вы запрашивали, и их эквиваленты в Python.

  • беззнаковое и подписанное int 8 бит, int
  • беззнаковое и подписанное int 16 бит, int
  • беззнаковое и подписанное int 32 бита, беззнаковое: длинный, подписанное int
  • беззнаковое и подписанное int 64 бита, длинный

  • двойной, плавать

  • поплавок, плавать
  • строка, это то, с чего вам нужно было начать

Я не знаю, что это за следующие, поэтому я не знаю эквивалента Python.

  • беззнаковый и подписанный 8 бит,
  • беззнаковые и подписанные 16 бит,
  • беззнаковый и подписанный 32 бита,
  • беззнаковый и подписанный 64-битный.

У вас уже есть все важные преобразования: int(), long() и float().

* беззнаковые и подписанные 8-битные, * беззнаковые и подписанные 16-битные, * беззнаковые и подписанные 32-битные, * беззнаковые и подписанные 64-битные. обратитесь к битовым полям

user46646 22.12.2008 15:22

Что означает «битовое поле»? У int 32 бита - мне кажется, это битовое поле. Какие атрибуты и операции этого «битового» поля отличает его от int?

S.Lott 22.12.2008 15:37

Я не думаю, что на этот вопрос можно обязательно хорошо ответить без дополнительной информации. Как говорили другие, в python есть только int и long для целых чисел - язык не придерживается архетипов битовой ширины и подписи языков программирования более низкого уровня.

Если вы полностью работаете в Python, то, вероятно, задаете неправильный вопрос. Вероятно, есть лучший способ сделать то, что вам нужно.

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

У меня только что возникла проблема, когда у меня было значение, переданное как 16-битное двоичное дополнение со знаком из Modbus. Мне нужно было преобразовать это в число со знаком. В итоге я написал это, что, кажется, работает нормально.

# convert a 32 bit (prob) integer as though it was 
# a 16 bit 2's complement signed one
def conv_s16(i):
    if (i & 0x8000):
        s16 = -(((~i) & 0xFFFF) + 1)
    else:
        s16 = i
    return s16

Другие вопросы по теме