[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