Подтвердить что ты не робот

Типизация в Python

Мне нужно преобразовать строки в Python в другие типы, такие как неподписанные и подписанные 8, 16, 32 и 64-битные int, double, floats и strings.

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

4b9b3361

Ответ 1

Вы можете преобразовать строку в 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-битных поплавков.

Ответ 2

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

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

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

  • double, float

  • float, float
  • string, это то, что вам нужно было начинать с

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

У меня только сейчас была проблема, когда мне передавали значение в виде 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