Chris Angelico於 2018年4月12日星期四 UTC+8下午4時05分29秒寫道: > On Thu, Apr 12, 2018 at 4:20 PM, <jf...@ms4.hinet.net> wrote: > > Chris Angelico於 2018年4月12日星期四 UTC+8下午1時31分35秒寫道: > >> On Thu, Apr 12, 2018 at 2:16 PM, <jf...@ms4.hinet.net> wrote: > >> > This C function returns a buffer which I declared it as a > >> > ctypes.c_char_p. The buffer has size 0x10000 bytes long and the valid > >> > data may vary from a few bytes to the whole size. > >> > > >> > In every call I know how much the valid data size is, but I suppose I > >> > can't use slice to get it because there may be zero byte in it. What to > >> > do? > >> > > >> > >> You suppose? Or have you tested it? > >> > >> ChrisA > > > > Yes, I had test it once before. Now, I re-do it again to make sure. After a > > call which returns 3 bytes of data, I use len(buf) to check the length and > > get the number 24. I can see the first 24 bytes of data by using buf[:30] > > but buf[24] will cause an "index out of range" error. I don't know how to > > see what the buf[24] exactly is but I suppose it might be a zero byte. > > > > If you have 24 bytes, they're numbered 0 through 23. So there is no byte at > 24. > > ChrisA
Using a technique you mentioned in subject "how to memory dump an object?" at 16/5/21, I confirm the length of buf was decided by a \x00 byte: >>> len(buf) 24 >>> id(buf) 13553888 >>> ptr = ctypes.cast(id(buf), ctypes.POINTER(ctypes.c_ubyte)) >>> buf[:24] b'\x05ALLOTNPUT_BUFFER_SIZE\x02+' >>> bytes([ptr[i] for i in range(50)]) b'\x02\x00\x00\x00X\xa1%\x1e\x18\x00\x00\x00\xff\xff\xff\xff\x05ALLOTNPUT_BUFFER_SIZE\x02+\x00\n\x00\x00\x00\x00\x00\x00\xb0\x9b' >>> but it won't help on solving my problem. Still need someone's help:-) --Jach -- https://mail.python.org/mailman/listinfo/python-list