-
Notifications
You must be signed in to change notification settings - Fork 0
/
datatypes.py
64 lines (51 loc) · 1.03 KB
/
datatypes.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
def padhex(n,d):
return ('0'*d+(str(hex(n))[2:].rstrip('L')))[-d:]
def siprefix(n,binary=True):
pre=8
prefixes='yzafpnum kMGTPEZY'
while n<1:
n*=1024 if binary else 1000
pre-=1
while n>1024 if binary else 1000:
n/=1024.0 if binary else 1000.0
pre+=1
return str(int(n*10)/10.0)+prefixes[pre]
def st(f,n):
return f.read(n).rstrip('\x00')
def nt(f):
s=''
while True:
c=f.read(1)
if c=='\x00':
return s
s+=c
def var(f):
n=0
c=0x100
while c>0x7F:
c=u8(f)
n<<=7
n|=c&0x7F
return n
def u8(f):
return ord(f.read(1))
def s8(f):
n=u8(f)
if n<0x80:
return n
return n-0x100
def u16(f):
return u8(f)|(u8(f)<<8)
def u24(f):
return u16(f)|(u8(f)<<16)
def u32(f):
return u16(f)|(u16(f)<<16)
def swap(n,b):
o=""
s=('0'*b+hex(n)[2:])[-b*2:]
while len(s)>0:
print s,o
o+=s[-2:]
s=s[:-2]
print o
return int(o,16)