Python с плавающей точкой для значений Ord

#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" , чтобы явно выбрать, какой из этих порядков использовать