我们从Python开源项目中,提取了以下7个代码示例,用于说明如何使用ctypes.BigEndianStructure()。
def test_memoryview_tobytes(self): # Many implicit tests are already in self.verify(). t = (-529, 576, -625, 676, -729) nd = ndarray(t, shape=[5], format='@h') m = memoryview(nd) self.assertEqual(m, nd) self.assertEqual(m.tobytes(), nd.tobytes()) nd = ndarray([t], shape=[1], format='>hQiLl') m = memoryview(nd) self.assertEqual(m, nd) self.assertEqual(m.tobytes(), nd.tobytes()) nd = ndarray([t for _ in range(12)], shape=[2,2,3], format='=hQiLl') m = memoryview(nd) self.assertEqual(m, nd) self.assertEqual(m.tobytes(), nd.tobytes()) nd = ndarray([t for _ in range(120)], shape=[5,2,2,3,2], format='<hQiLl') m = memoryview(nd) self.assertEqual(m, nd) self.assertEqual(m.tobytes(), nd.tobytes()) # Unknown formats are handled: tobytes() purely depends on itemsize. if ctypes: # format: "T{>l:x:>l:y:}" class BEPoint(ctypes.BigEndianStructure): _fields_ = [("x", ctypes.c_long), ("y", ctypes.c_long)] point = BEPoint(100, 200) a = memoryview(point) self.assertEqual(a.tobytes(), bytes(point))
def check_ctypes_datatype(datatype): valid_datatypes = ( ctypes._SimpleCData, ctypes.Union, ctypes.BigEndianStructure, ctypes.LittleEndianStructure, ctypes.Structure, ) for t in valid_datatypes: if issubclass(datatype, t): return raise TypeError('datatype must be a ctypes data type, but was {}'.format(datatype.__name__))
def test_memoryview_compare_special_cases(self): a = array.array('L', [1, 2, 3]) b = array.array('L', [1, 2, 7]) # Ordering comparisons raise: v = memoryview(a) w = memoryview(b) for attr in ('__lt__', '__le__', '__gt__', '__ge__'): self.assertIs(getattr(v, attr)(w), NotImplemented) self.assertIs(getattr(a, attr)(v), NotImplemented) # Released views compare equal to themselves: v = memoryview(a) v.release() self.assertEqual(v, v) self.assertNotEqual(v, a) self.assertNotEqual(a, v) v = memoryview(a) w = memoryview(a) w.release() self.assertNotEqual(v, w) self.assertNotEqual(w, v) # Operand does not implement the buffer protocol: v = memoryview(a) self.assertNotEqual(v, [1, 2, 3]) # NaNs nd = ndarray([(0, 0)], shape=[1], format='l x d x', flags=ND_WRITABLE) nd[0] = (-1, float('nan')) self.assertNotEqual(memoryview(nd), nd) # Depends on issue #15625: the struct module does not understand 'u'. a = array.array('u', 'xyz') v = memoryview(a) self.assertNotEqual(a, v) self.assertNotEqual(v, a) # Some ctypes format strings are unknown to the struct module. if ctypes: # format: "T{>l:x:>l:y:}" class BEPoint(ctypes.BigEndianStructure): _fields_ = [("x", ctypes.c_long), ("y", ctypes.c_long)] point = BEPoint(100, 200) a = memoryview(point) b = memoryview(point) self.assertNotEqual(a, b) self.assertNotEqual(a, point) self.assertNotEqual(point, a) self.assertRaises(NotImplementedError, a.tolist)