Как отправить строку вместо bytearray в python через USB-порт? - PullRequest
0 голосов
/ 27 июня 2019

В labview я преобразую массив в строку и просто вывожу его:

block diagram extract

Но в Python 3.6, когда я использую функцию serial.write(string)Строка должна быть превращена в bytearray.

Есть ли возможность отправить строку без ее преобразования в bytearray?

1 Ответ

0 голосов
/ 27 июня 2019

Нет.

Строка Python 3.x представляет собой последовательность Unicode кодовых точек.Кодовая точка Unicode - это абстрактный объект, немного похожий на цвет красный : чтобы сохранить его или передать в цифровом виде, он должен быть закодирован в конкретном представлении одногоили больше байтов - немного похоже на кодирование цвета red как #ff0000.Чтобы отправить строку на другой компьютер, вам необходимо закодировать ее в последовательность байтов и , поскольку существует множество возможных кодировок, которые вы, возможно, захотите использовать, вам нужно указать, какой из них:

bytesToSend = myString.encode(encoding="utf-8")

Почему вам не нужно было делать это в LabVIEW? Многие более старые языки программирования, включая LabVIEW и Python до 3.x, основаны на предположении, что строки кодируются 1: 1 в байты- каждый символ - один байт, и каждый байт - один символ.Именно так это работало в первые дни вычислений, когда памяти было мало, а неанглоязычный текст был необычным, но сейчас этого недостаточно, чтобы программное обеспечение использовалось глобально в сетевом мире.

Python 3.x сделал явный разрыв ссылки и сделал строки и последовательности байтов различными и несовместимыми типами: это означает, что вам приходится иметь дело с разницей, но это не так уж важно, просто encodeи decode по мере необходимости, и, на мой взгляд, это менее запутанно, чем пытаться делать вид, что строки и последовательности байтов - это одно и то же.

LabVIEW наконец-то догоняет Unicode в версии NXG, хотя для обратной совместимости он позволяет вам напрямую связывать строки для некоторых функций, которые действительно работают с байтовыми последовательностями.

Для получения дополнительной информации я рекомендую прочитать Python 3.x Unicode HOWTO .

...