2009-01-23 40 views
16

El método serial.write() en pyserial parece enviar solo datos de cadena. Tengo matrices como [0xc0, 0x04, 0x00] y quiero poder enviarlas/recibirlas a través del puerto serie. ¿Hay algún método por separado para E/S en bruto?Datos binarios con pyserial (puerto serie de python)

Creo que podría necesitar cambiar las matrices a ['\ xc0', '\ x04', '\ x00'], aún así, el carácter nulo podría plantear un problema.

Respuesta

10

es necesario convertir sus datos en una cadena

"\xc0\x04\x00" 

caracteres nulos no son un problema en Python - cadenas no son terminada en cero el byte cero se comporta igual que otro byte "\x00".

Una forma de hacer esto:

>>> import array 
>>> array.array('B', [0xc0, 0x04, 0x00]).tostring() 
'\xc0\x04\x00' 
12

Un método alternativo, sin necesidad de utilizar el módulo array:

def a2s(arr): 
    """ Array of integer byte values --> binary string 
    """ 
    return ''.join(chr(b) for b in arr) 
+1

1 mejor respuesta para mí – PALEN

+0

mapa puede ser aún más rápido: 'def a2s (arr): return '' .join (mapa (chr, arr)) ' – RufusVS

Cuestiones relacionadas