Типирование в Python

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

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

 ian5v01 мая 2016 г., 08:25

Ответы на вопрос(5)

когда мне передавали значение как 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

ython строки преобразуются в int, long или float, потому что это все, что есть.

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

без знака и со знаком int 8 бит,ИНТбез знака и со знаком в 16 битах,ИНТбез знака и со знаком int 32 бита, без знака:долгоподписаноИНТ

без знака и со знаком int 64 бита,долго

двойной,поплавок

плавать,поплавокстрока,это то, с чего вам пришлось начать

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

без знака и со знаком 8 бит,без знака и подписи 16 бит,без знака и подписи 32 бит,без знака и подписи 64 бит.

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

 user4664622 дек. 2008 г., 13:22
* без знака и со знаком 8 бит, * без знака и со знаком 16 бит, * без знака и со знаком 32 бита, * без знака и со знаком 64 бита. обратитесь к битовым полям
 S.Lott22 дек. 2008 г., 13:37
Что означает «битовое поле»? Int имеет 32 бита - для меня это битовое поле. Каковы атрибуты и операции этого «битового» поля, которое отличает его от целого?

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

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

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

Решение Вопроса

помощьюint функция:

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

Если строка не представляет целое число, вы получитеValueError исключение. Обратите внимание, однако, что если строка действительно представляет целое число, но это целое число не помещается в 32-разрядное целое число со знаком, то вы фактически получите объект типа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-битных операций с плавающей запятой.

 Adam Rosenfield14 дек. 2010 г., 06:21
@ Доминик: Ой, ты прав.
 jfs22 дек. 2008 г., 06:22
Интересно, насколько разные могут быть приняты ответы на один и тот же вопросstackoverflow.com/questions/374318/...
 Dominic Bou-Samra14 дек. 2010 г., 04:23
Может быть не так, но не u8 должен быть i% 2 ** 8
 cozos06 июл. 2018 г., 04:22
@AdamRosenfield Не могли бы вы объяснить математику преобразования в целое число со знаком? Например, для 32-битного целого, я думаю об этом: получить беззнаковое 32-битное целое, а затем взять десятичное значение его представления дополнения до двух, но я не уверен, как это переводится в(i + 2**31) % 2**32 - 2**31
 Dominic Bou-Samra14 дек. 2010 г., 08:02
Хех. Я потратил целую вечность на отладку кода сегодня утром, и это был преступник: D

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

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

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

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

Ваш ответ на вопрос