def decode(self, data, parent=None, name=None, little_endian=False): container = self._get_struct(name, parent, little_endian=little_endian) if little_endian: data = data[::-1] bin_str = to_binary_string_of_length(self.binlength, data[:self.binlength / 8]) data_index = 2 for field in self._fields.values(): container[field.name] = self._create_field(bin_str, data_index, field) data_index += field.length.value return container
def test_to_0bbinary(self): self.assertEquals(to_binary_string_of_length(1, "\x00"), "0b0") self.assertEquals(to_binary_string_of_length(3, "\x00"), "0b000") self.assertEquals(to_binary_string_of_length(9, "\x01\xff"), "0b111111111") self.assertEquals(to_binary_string_of_length(12, "\x01\xff"), "0b000111111111") self.assertEquals( to_binary_string_of_length(68, "\x01\x00\x00\x00\x00\x00\x00\x00\x00"), "0b0001" + ("0000" * 16) ) self.assertEquals( to_binary_string_of_length(2048, "\xff\xff\xff\xff\xff\xff\xff\xff" * 32), "0b" + ("11" * 1024) )
def test_to_0bbinary(self): self.assertEquals(to_binary_string_of_length(1, '\x00'), '0b0') self.assertEquals(to_binary_string_of_length(3, '\x00'), '0b000') self.assertEquals(to_binary_string_of_length(9, '\x01\xff'), '0b111111111') self.assertEquals(to_binary_string_of_length(12, '\x01\xff'), '0b000111111111') self.assertEquals( to_binary_string_of_length(68, '\x01\x00\x00\x00\x00\x00\x00\x00\x00'), '0b0001' + ('0000' * 16)) self.assertEquals( to_binary_string_of_length( 2048, '\xff\xff\xff\xff\xff\xff\xff\xff' * 32), '0b' + ('11' * 1024))