0

この質問はおそらくほとんどの人にとって非常に簡単ですが、私は今のところ答えを見つけることができません。

私は次のようなネットワークパケットジェネレータを構築しています:

class PacketHeader(Packet):
fields = OrderedDict([
    ("head", "\x00"),
    ("headpad", "\x00"),
    ("headlen", "\x1a\x00" ),
    ("presentflag", "\x2e"),
    ("timestamp", "\x43\x10\x58\x16\xa1\x01\x00\x00"),
    ("flag", "\x03"),
    ("Sequencenum", "\x04\x00"),

])

後で、クラスを呼び出して、次のようにパケットを送信します。

send(PacketHeader(Sequencenum=257))
send(PacketHeader(Sequencenum=258))
send(PacketHeader(Sequencenum=259))

残念ながら、私はこれを持っている代わりに\x32\x35\x37(257インチ)を持っています: 。hex\x01\x01

私がやりたいことは、次のことができることです。

send(PacketHeader(Sequencenum=257+1)) 

ワイヤー上で正しくintに変換されます

前もって感謝します !

4

3 に答える 3

3

intまたはその他のプリミティブデータ型をバイナリに変換する場合は、structモジュールが役立つ場合があります。

http://docs.python.org/library/struct

>>> import struct
>>> struct.pack('>i', 257)
'\x00\x00\x01\x01'
>>> struct.pack('<i', 257)
'\x01\x01\x00\x00'
>>> struct.unpack('<i', '\x01\x01\x00\x00')
(257,)
>>> struct.unpack('>i', '\x00\x00\x01\x01')
(257,)

ms4pyあなたが2バイトのintを変換したいかもしれないと述べたので:

>>> struct.pack('>h', 257)
'\x01\x01'
>>> struct.unpack('>h', '\x01\x01')
(257,)
>>> 

ああそして:

>>> struct.unpack('>h', '\x10\x00')
(4096,)
>>> 
于 2012-07-10T20:55:57.117 に答える
0

整数があり、16進数が必要な場合:

hex(257)
'0x101'

他の方法

int('0x101', 16)
257
于 2012-07-10T20:57:31.983 に答える
-1

私には、整数から2進数へのコンバーターが必要なようです。

その場合、これは機能するはずです。

def convert(N):
    if not N:
        return ''
    else:
        return "%s%s" %(convert(N/2), N%2)

お役に立てれば

于 2012-07-10T21:03:00.877 に答える