Martin Panter added the comment: For the record, I have been (ab?)using the “c_char_p” type to get the address of immutable byte strings without copying memory:
>>> from ctypes import * >>> data = b"123\x00abc" >>> pubyte = cast(c_char_p(data), POINTER(c_ubyte)) >>> address = addressof(pubyte.contents) >>> string_at(address, 7) b'123\x00abc' >>> # 2nd instance has same address, rather than memory copy: ... cast(c_char_p(data), c_void_p).value == address True In to the documentation, “c_char_p” is only defined for zero-terminated strings, but it seems to also work for strings with embedded zero bytes. However it does not work for “bytearray” objects (“from_buffer” should work instead), nor memory views. ---------- nosy: +vadmium _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue11427> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com