|
|
|
|
 python 中如何进行字节处理? - nzy [ 2005-02-18 19:18 | 152 byte(s)]
 Re: python 中如何进行字节处理? - passworld [ 2005-02-19 16:33 | 577 byte(s)]
 Re: python 中如何进行字节处理? - limodou [ 2005-02-18 19:21 | 14 byte(s)]
 Re: python 中如何进行字节处理? - nzy [ 2005-02-18 19:29 | 98 byte(s)]
 Re: python 中如何进行字节处理? - limodou [ 2005-02-18 22:32 | 335 byte(s)]
 Re: python 中如何进行字节处理? - wang_jianqiang [ 2005-02-19 13:43 | 1,674 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
|
在C/C++中可以利用指针很容易的来处理字节,比如通过指针可以修改和读取一个整形变量(4字节)的任意一个字节。请问各位这个功能在python中如何才能够实现呢?谢谢
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
因为python中没有指针,因此对于象一个整数这样的东西,想把某个字节取出来必须要经过计算才可以得到,而不能直接得到。再有python中是对象,象
a=12345,你不可能去改a的内存的,只有先转化为别的对象,再处理,然后再生成新的对象。这已经不是同一个对象了。与C的差别很大。(在python中有可变对象与不可变对象一说,可变对象为:list, dict和实例)
|
|
|
----
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
from struct import unpack
from socket import inet_ntoa
def n2a(ip):
s=''
s+=str((ip>>24)&0xff)
s+='.'
s+=str((ip>>16)&0xff)
s+='.'
s+=str((ip>>8 )&0xff)
s+='.'
s+=str((ip>>0 )&0xff)
return s
#flowData = 'x00x05x00x01x00x00x98xA6x42x04x9BxBBx00x00x00x00x00x00x01x05x00x00x00x00x0Ax8Fx84x51x0AxFFxFFxFFx00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x98xA6x00x00x98xA6x00x8Ax00x8Ax00x00x11x00x00x00x00x00x00x00x00x00'
flowData = 'x00x05x00x01x00x00xC8x4Ex42x04x9Ax29x00x00x00x00x00x00x00x4Bx00x00x00x00x0Ax8Fx84x45xEFxFFxFFxFEx00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00xC8x4Ex00x00xC8x4Ex00x89x00x89x00x00x02x00x00x00x00x00x00x00x00x00'
flowData = 'x00x05x00x01x00x00xF0xD2x42x04x42x80x00x00x00x00x00x00x00x00x00x00x00x00x0Ax8Fx84x45x0Ax8Fx84x03x00x00x00x00x00x00x00x00x00x00x00x0Ax00x00x3Ax98x00x00xF0xD2x00x00xF0xD2x05xCFx80x30x00x10x06x00x00x00x00x00x00x00x00x00'
header = unpack('>2H4I4x',flowData[:24])
flow = unpack('>3I2H4I2Hx3B2H2B2x',flowData[24:24+48])
srcIp,dstIp,nextHop,ifInput,ifOutput,pkts,bytes,startTime,endTime,srcPort,dstPort,tcpFlag,proto,tos,srcAS,dstAS,srcMask,dstMask=flow
print srcIp
print dstIp
print 'srcIp '+inet_ntoa(flowData[24:24+4])
print 'dstIp '+inet_ntoa(flowData[24+4:24+8])
print 'srcIp '+n2a(srcIp)
print 'dstIp '+n2a(dstIp)
|
|
|
--
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
>>> import array
>>> a = array.array('c')
>>> a.fromstring('Hello World!')
>>> a[2] = 'a'
>>> print a[2]
a
>>> print a
array('c', 'Healo World!')
>>> a.tostring()
'Healo World!'
But python's strength is ease of programming, not speed. Using string
directly is cleaner.
|
|
|
[Original]
[Print]
[Top]
|
|
|