[Python] problemi con stringa esadecimale Wake On Lan RISOLTO

Vittorio Spina vittorio.spina a gmail.com
Sab 20 Ott 2012 16:27:12 CEST


accettando il consiglio sulle regole di buona composizione delle domande,
chiudo il post con la soluzione del problema.
In effetti facevo un po' di casino con gli string literal. la soluzione 
di Varrazzo è perfettamente funzionante e risolutoria e ve la riporto 
per completezza
''.join(chr(int(x, 16)) for x in macaddr.split(':'))
ciao, grazie

Il 19/10/2012 19:38, Leonardo M. Millefiori ha scritto:
> Il 19/10/2012 17:46, Daniele Varrazzo ha scritto:
>> On 2012-10-19 16:21, Giovanni Vittorio Spina wrote:
>>> ciao a tutti ho un problema
>>> sto facendo un programmetto che avvia dei pc trmite wke on lan
>>> il protocollo da inviare è
>>> *s.sendto('\xff'*6+'\x14\xDA\xE9\x11\x15\xC2'*16,
>>> ("255.255.255.255",9))*
>>> cioè l'indirizzo broadcast seguito da 16 volte il macaddress e poi la
>>> netmask
>>> se scrivo in questa forma funziona perfettamente
>>>
>>> io leggo da un file testo che l'utente riempirà con il suo macaddress una
>>> stringa del tipo
>>> *macaddress = "14:DA:E9:11:15:C2"*
>>> quindi eseguo le operazioni sul testo che ho letto:
>>> *macParts = macaddress.split(":")
>>> macaddressRightForm=""
>>> for part in macParts:
>>>           macaddressRightForm +='\x'+part.lower()*
>>> *MagicPacket            = macaddressRightForm*16*
>>> dopo di che vorrei costruire la stringa da inviare come
>>> *s.sendto('\xff'*6+MagicPacket, ("255.255.255.255",9))*
>>> e così non ne vuol sapere di funzionare...
>>> è come se facesse delle conversioni implicite per il fatto che sono
>>> valori
>>> esadecimali
>>> potete aiutarmi???
>>> grazie
>>> Vittorio
>> quando dici es. s.sendto('\xff') non stai mandando una stringa di 4
>> caratteri, ma uno solo: il byte con valore 255. Il formato '\xnn' è come
>> la stringa viene "rappresentata", visto che quei caratteri non sono
>> stampabili.
>>
>> Quindi se hai un macaddress in testo: "14:DA:E9:11:15:C2" penso tu debba
>> trasformarlo in bytes. Qualcosa come
>>
>> In [1]: macaddr = "14:DA:E9:11:15:C2"
>>
>> In [4]: ''.join(chr(int(x, 16)) for x in macaddr.split(':'))
>> Out[4]: '\x14\xda\xe9\x11\x15\xc2'
>>
>> Questo *dovrebbe* essere il tuo macaddressRightForm.
>>
> Potresti anche usare il modulo struct:
> [1] http://code.activestate.com/recipes/358449-wake-on-lan/
> [2] http://docs.python.org/library/struct.html
>
> LMM
>
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python



Maggiori informazioni sulla lista Python