Python - 十进制到整数低字节然后是高字节

Pab*_* P. 2 python hex byte integer decimal

您好我是Python的新手,但我对它感兴趣已有2年了.我想制造机器人,我正在尝试pyserial在搅拌机上使用Python .但是我发现了一个问题,在谷歌和这个网站上寻找答案2个小时之后,我发现也许我迟钝了,因为我无法解决它.我想还没问.

我正在使用devantech sd84伺服控制器并通过USB端口控制它,这是我使用的串行设备pyserial.问题是我希望Python在用户输入之间取一个十进制值400- 2200我知道如何做但我需要Python将它显示为两个字节并先发送低字节然后再发送高字节.例如(伪代码,因为我不知道如何编程):

    #ask for a decimal number between a range (the range does not really matters)
    x = raw_input('\tInsert a number between 400-2200:') #Insert a number between 400-2200: 1500
    #show it as hex
    hex(x) #5dc
    #put it in two bytes and in this case add a zero(?) I don't know how to do that.
    0xDC 0x05
    #add it to a 16-bit integer to send it to the servo controller via the virtual serial port(?) i also don't know how to do that. 
   ser.write('\xAA\xA0\x55\x01\x01\x02\xDC\x05')
Run Code Online (Sandbox Code Playgroud)

为了对具有相同控制器的人的兴趣,我将解释16位整数前三个字节是同步(\xAA\xA0\x55)然后是命令类型SET_SERVO(位置)(\ x01)然后通道1-84为1是(\ x01)然后是字节数在这种情况下2(\ x02)和伺服位置低字节然后高字节(\ xDC\x05)现在我用我的iPod用应用程序计算然后我手动插入哈哈哈我想停止那个愚蠢的事情,让他为我做计算.

现在我将发布一个我为测试目的而制作的代码,它在通道1中制作了一个伺服器,它以不同的速度进行全方位运行并用西班牙语打印有趣的东西,而伺服"跳舞"我手动计算出位置并插入它们哈哈哈听起来像历史为了我.

    # -*- coding: utf-8 -*-
    #Pablo P. 2012 "bailecillo"
    #mueve un servo en el canal 1 a través de todo su recorido e imprime frases mientras dicho servo "baila"
    import serial
    import time
    # Para cambiar de Sistema Operativo cambiar puerto 
    #en la siguiente línea: Win COM# linux /dev/ttyS# /dev/ttyUSB#
    # #=un número asignado por tu sistema.
    port='COM3'
    sync='\xAA\xA0\x55'
    SET_SERVO='\x01'
    GET_SERVO='\x02'
    SET_SPEED='\x03'
    SET_MODE='\x04'
    GET_MODE='\x05'
    SET_AD_CNT='\x06' #Controla el número de canales analógicos.
    GET_AD_CNT='\x07' #Devuelve el número de canales analógicos actuales.
    GET_INPUT='\X08' # Devuelve el estado de una entrada.
    GET_ADC='\X09' #Devuelve el valor de un canal analógico.
    GET_VERSION='\x0A' #Devuelve la versión del procesador seleccionado.
    GET_BULK='\x15' #Usado para test en fábriica.
    TEST='\X16' #Usado para test en fábrica.
    ser = serial.Serial(port, baudrate=115200, bytesize=8, parity='N', stopbits=2,timeout=1)

   print "Hola! me alegro de verte."
   time.sleep(2)

   if ser.isOpen():
print "Estado del puerto: Correcto."
time.sleep(1)
print "Procedo a enviar modo del canal 1 y posicion(es) del mismo."
time.sleep(3)
print "Comprobando sistemas de baile..."
ser.write(sync+SET_MODE+'\x01\x01\x19')
ser.write(sync+SET_SERVO+'\x01\x02\x98\x08') #izda
time.sleep(3)
ser.write(sync+SET_SERVO+'\x01\x02\x90\x01') #derecha
time.sleep(1)
ser.write(sync+SET_SPEED+'\x01\x01\x10')
ser.write(sync+SET_SERVO+'\x01\x02\x78\x05') #centro
time.sleep(2)
print "Vamos a bailar!"
time.sleep(2)
print "preparados..."
time.sleep(1)
print "listos..."
time.sleep(1)
print "Yaaaa!!"
ser.write(sync+SET_SERVO+'\x01\x02\x98\x08') #izda
time.sleep(3)
ser.write(sync+SET_SERVO+'\x01\x02\x90\x01') #derecha
time.sleep(3)
ser.write(sync+SET_SERVO+'\x01\x02\x98\x08') #izda
time.sleep(3)
ser.write(sync+SET_SERVO+'\x01\x02\x90\x01') #derecha
time.sleep(3)
ser.write(sync+SET_SERVO+'\x01\x02\x98\x08') #izda
time.sleep(3)
ser.write(sync+SET_SERVO+'\x01\x02\x90\x01') #derecha
time.sleep(3)
ser.write(sync+SET_SERVO+'\x01\x02\x78\x05') #centro
time.sleep(3)
ser.write(sync+SET_SPEED+'\x01\x01\x00')
ser.close()
time.sleep(1)
print "Todo el proceso completado correctamente."

    else:
        print "El puertito está cerrado"

    print "Hasta Luego :D"
Run Code Online (Sandbox Code Playgroud)

Ign*_*ams 8

这就是为什么Python 新手的程序员应该查看libref的原因.

>>> struct.pack('<h', 1500)
'\xdc\x05'
Run Code Online (Sandbox Code Playgroud)