#python #python-3.x
#python #python-3.x
Вопрос:
У меня есть массив с плавающей точкой, который мне нужно отправить по TCP / IP, протокол основан на тексте, поэтому в принципе я не могу отправлять напрямую двоичный файл.
Что я пытаюсь сделать, так это преобразовать значения с плавающей точкой в 4 Ord
Итак, пример:
«»» Инициализировать значение с плавающей точкой «»»
a = 3.14159
«»» Конечным результатом должна быть строка, содержащая 4 Ord, по 1 на каждый байт значения с плавающей точкой: «»»
b = «1232322245»
Кто-нибудь может мне помочь с этим?
ТИА!
Комментарии:
1. Вы уверены, что не имеете в виду
b = b"1232322245"
?
Ответ №1:
>>> import struct
>>> struct.pack("!f",3.14159)
b'@Ix0fxd0'
не уверен, к чему вы пришли "1232322245"
Если вы хотите преобразовать список значений с плавающей точкой
>>> a=[3.14159, 2.71828]
>>> struct.pack("!{}f".format(len(a)), *a)
выдаст вам единственную строку. Нет необходимости в явном цикле и объединении
Комментарии:
1. Ого! число between — это способ, которым протокол анализирует значение байтов… Итак, в принципе, у меня есть примерно 1 значение с плавающей точкой из 3.14159, и мне нужно преобразовать его в 4 значения без знака char, разделенных
2. Хорошо, только что попробовал ваш код выше: a = struct.pack(«!f»,3.14159) для i в диапазоне ( len( a ) ): print( a[ i ] ) Получилось, теперь мне нужно объединить это в длинную строку. Для этого «».join должно быть самым быстрым, верно?
3. Еще один вопрос! f измените порядок байтов на обратный, разве вместо этого не должно быть просто f?
4.
"!f"
использует «сетевой порядок», поэтому, если вы используете большой конечный процессор на одном конце и маленький конечный процессор на другом конце, он все равно будет работать. Вы также можете использовать"<f"
or">f"
, чтобы явно выбрать, какой из этих порядков использовать