Объекты Bytes в Python: помимо числового преобразования
При работе с объектами bytes в Python важно понимать, как bytes(n) функция отличается от числового преобразования. Передача целого числа n в bytes(n) не возвращает двоичное представление n, а скорее создает строку байтов длины n, заполненную нулевыми байтами (\x00).
Обоснование поведения
Это поведение было введено в Python 3.2 как часть попытки предотвратить неожиданные преобразования целых чисел в байты. Ранее функция bytes(n) выполняла недокументированное преобразование целого числа в двоичное представление, что приводило к потенциальным проблемам.
Чтобы устранить эту двусмысленность, функция bytes(n) была переопределена и вместо этого создавала строку байтов, заполненную нулями. , гарантируя отсутствие неявного преобразования. Разработчики, которым требуется двоичное представление целого числа, теперь могут явно использовать метод to_bytes().
Альтернативные решения
Для контролируемого преобразования целых чисел в байты Python предоставляет метод int.to_bytes(). Этот метод позволяет указать порядок байтов («большой» или «с прямым порядком байтов») и желаемую длину результирующей строки байтов.
Кроме того, для облегчения этого преобразования можно создать собственные вспомогательные функции:
def int_to_bytes(number: int) -> bytes:
"""Converts an integer to bytes representing its unsigned value."""
return number.to_bytes(length=(8 (number (number Optional[int]:
"""Converts a byte string to its corresponding signed integer value."""
return int.from_bytes(binary_data, byteorder='big', signed=True)
Используя эти методы, разработчики могут уверенно преобразовывать целые числа в байты способом, соответствующим их конкретным требованиям.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3