Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

Я не думаю, что на этот вопрос обязательно можно ответить без дополнительной информации.Как говорили другие, в 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top