Мне нужно преобразовать строки в Python в другие типы, такие как неподписанные и подписанные 8, 16, 32 и 64-битные int, double, floats и strings.
Как я могу это сделать?
Мне нужно преобразовать строки в Python в другие типы, такие как неподписанные и подписанные 8, 16, 32 и 64-битные int, double, floats и strings.
Как я могу это сделать?
Вы можете преобразовать строку в 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-битных поплавков.
Следующие типы - по большей части - не существуют в Python в первую очередь. В Python строки преобразуются в ints, longs или floats, потому что все это есть.
Вы запрашиваете конверсии, которые в первую очередь не относятся к Python. Вот список типов, которые вы запросили, и их эквивалент Python.
неподписанные и подписанные int 64 бит, long
double, float
Я не знаю, что это такое, поэтому я не знаю эквивалента Python.
У вас уже есть все необходимые преобразования: int()
, long()
и float()
.
Python имеет только один тип int
. Чтобы преобразовать строку в int
, используйте int()
следующим образом:
>>> str = '123'
>>> num = int(str)
>>> num
123
Изменить: Также для преобразования в float используйте float()
точно так же.
Я не думаю, что на это можно ответить без дополнительной информации. Как говорили другие, в python существует только int и long для целых чисел - язык не придерживается артефактов ширины и подписи языка программирования более низкого уровня.
Если вы полностью работаете внутри python, вы, вероятно, задаете неправильный вопрос. Вероятно, лучший способ сделать то, что вам нужно.
Если вы взаимодействуете, например, с C-кодом или над сетью, то существуют способы, и это похоже на то, что ответ на предыдущую публикацию охватывал этот проспект довольно удобно.
У меня только сейчас была проблема, когда мне передавали значение в виде 16-битного числа с двойным знаком со знаком modbus. Мне нужно было преобразовать это в число с подписью. Я закончил тем, что написал это, который, кажется, работает хорошо.
# convert a 32 bit (prob) integer as though it was
# a 16 bit 2 complement signed one
def conv_s16(i):
if (i & 0x8000):
s16 = -(((~i) & 0xFFFF) + 1)
else:
s16 = i
return s16