Python将字符串转换为字节 [英] Python Convert String to Byte

查看:499
本文介绍了Python将字符串转换为字节的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试执行一些串行输入和输出操作,其中之一是将8x8阵列发送到外部设备(Arduino)。 pySerial 库要求我发送的信息为字节。但是,在我的python代码中,8x8矩阵由< class’str'> 类型组成。这是我的发送函数:

I am trying to do some serial input and output operations, and one of those is to send an 8x8 array to an external device (Arduino). The pySerial library requires that the information that I send be a byte. However, in my python code, the 8x8 matrix is made up of types <class 'str'>. Here's my sending function:

import serial
import Matrix

width = 8
height = 8
portName = 'COM3'

def sendMatrix(matrix):
    try:
        port = serial.Serial(portName, 9600, timeout = 1000000)
        port.setDTR(0)
        print("Opened port: \"%s\"." % (portName))
        receivedByte = port.read()
        print(int(receivedByte))
        if (receivedByte == '1'):
            port.write('1')
        bytesWritten = 0
        for row in range(8):
            for col in range(8):
                value = matrix.getPoint(col, row)
                bytesWritten += port.write(value)//ERROR HERE!
        print(int(port.read()));
        port.close()
        print("Data (%d) sent to port: \"%s\"." % (bytesWritten, portName))
    except:
        print("Unable to open the port \"%s\"." % (portName))


def main():
    matrix = Matrix.Matrix.readFromFile('framefile', 8, 8)
    matrix.print()
    print(type(matrix.getPoint(0, 0)))
    print(matrix.getPoint(1, 1))
    sendMatrix(matrix)

main()

现在,我有一个类 Matrix ,其中包含一个字段 map ,这是有问题的数组,并且我也将在这里包含该代码,但是我遇到的问题是数组中的每个元素的类型都是 str ,但是我需要将其转换为字节。我可以忽略可能的数据丢失,因为实际上,我只使用0和1。

Now, I have a class Matrix, which contains a field map, which is the array in question, and I will include that code here too, but the problem I'm having is that each element in the array is of type str, but I need to convert it to a byte. I can disregard possible loss of data, since in practice, I only use 0's and 1's.

我的矩阵类:

class Matrix(object):

    def __init__(self, width, height):
        self.width = width
        self.height = height
        self.map = [[0 for x in range(width)] for y in range(height)]

    def setPoint(self, x, y, value):
        if ((x >= 0) and (x < self.width) and (y >= 0) and (y < self.height)):
            self.map[y][x] = value

    def getPoint(self, x, y):
        if ((x >= 0) and (x < self.width) and (y >= 0) and (y < self.height)):
            return self.map[y][x]

    def print(self):
        for row in range(self.height):
            for col in range(self.width):
                print(str(self.map[row][col])+" ", end="")
            print()

    def save(self, filename):
        f = open(filename, 'w')
        for row in range(self.height):
            for col in range(self.width):
                f.write(str(self.map[row][col]))
            f.write('\n')
        f.close()

    def toByteArray(self):
        matrixBytes = bytearray(self.width * self.height)
        for row in range(self.height):
            for col in range(self.width):
                matrixBytes.append(int(self.map[row][col]))
        return matrixBytes

    def getMap(self):
        return self.map

    def readFromFile(filename, width, height):
        f = open(filename, 'r')
        lines = list(f)
        matrix = Matrix(width, height)
        f.close()
        for row in range(len(lines)):
            matrix.map[row] = lines[row].strip('\n')
        return matrix


推荐答案

在Python中将unicode字符串转换为字节字符串是:

To transform a unicode string to a byte string in Python do this:

>>> 'foo'.encode('utf_8')
b'foo'

转换a字节字符串转换为unicode字符串:

To transform a byte string to a unicode string:

>>> b'foo'.decode('utf_8')
'foo'

请参见编码在标准库中解码

可用的编码在此表中中进行了记录。常用的是 utf_8 utf_8_sig ascii latin_1 cp1252 。请参见 UTF-8 BOM ASCII 拉丁1 Windows-1252 在Wikipedia上。

The available encodings are documented in this table. Commonly used ones are utf_8, utf_8_sig, ascii, latin_1 and cp1252. See UTF-8, BOM, ASCII, Latin-1 and Windows-1252 at Wikipedia.

对于$ decugging的帮助可以是 raw_unicode_escape 。请参见此表

Helpful for debbugging can be raw_unicode_escape. See this table.

这篇关于Python将字符串转换为字节的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆