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

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

# 

# The Python Imaging Library. 

# $Id$ 

# 

# Binary input/output support routines. 

# 

# Copyright (c) 1997-2003 by Secret Labs AB 

# Copyright (c) 1995-2003 by Fredrik Lundh 

# Copyright (c) 2012 by Brian Crowell 

# 

# See the README file for information on usage and redistribution. 

# 

 

from struct import unpack_from, pack 

from ._util import py3 

 

if py3: 

def i8(c): 

return c if c.__class__ is int else c[0] 

 

def o8(i): 

return bytes((i & 255,)) 

else: 

def i8(c): 

return ord(c) 

 

def o8(i): 

return chr(i & 255) 

 

 

# Input, le = little endian, be = big endian 

def i16le(c, o=0): 

""" 

Converts a 2-bytes (16 bits) string to an unsigned integer. 

 

c: string containing bytes to convert 

o: offset of bytes to convert in string 

""" 

return unpack_from("<H", c, o)[0] 

 

 

def si16le(c, o=0): 

""" 

Converts a 2-bytes (16 bits) string to a signed integer. 

 

c: string containing bytes to convert 

o: offset of bytes to convert in string 

""" 

return unpack_from("<h", c, o)[0] 

 

 

def i32le(c, o=0): 

""" 

Converts a 4-bytes (32 bits) string to an unsigned integer. 

 

c: string containing bytes to convert 

o: offset of bytes to convert in string 

""" 

return unpack_from("<I", c, o)[0] 

 

 

def si32le(c, o=0): 

""" 

Converts a 4-bytes (32 bits) string to a signed integer. 

 

c: string containing bytes to convert 

o: offset of bytes to convert in string 

""" 

return unpack_from("<i", c, o)[0] 

 

 

def i16be(c, o=0): 

return unpack_from(">H", c, o)[0] 

 

 

def i32be(c, o=0): 

return unpack_from(">I", c, o)[0] 

 

 

# Output, le = little endian, be = big endian 

def o16le(i): 

return pack("<H", i) 

 

 

def o32le(i): 

return pack("<I", i) 

 

 

def o16be(i): 

return pack(">H", i) 

 

 

def o32be(i): 

return pack(">I", i)