Вам необходимо сохранить только что завершенный байт.Ваша проблема в том, что вы не создали фактический bytes
объект для заполнения, так что сделайте это.Вы знаете, как долго должен получиться результат (одна восьмая размера вектора bool, округленный в большую сторону), поэтому используйте PyBytes_FromStringAndSize
, чтобы получить bytes
объект правильного размера, затем заполните его каквы идете.
Вы бы просто присвоили:
// Preallocate enough bytes
PyBytesObject *pbo = PyBytes_FromStringAndSize(NULL, (vec->dimensions[0] + 7) / 8);
// Put check for NULL here
// Extract pointer to underlying buffer
char *bytebuffer = PyBytes_AsString(pbo);
, где добавление 7, затем деление на 8 округлений, чтобы убедиться, что у вас достаточно байтов для всех битов, а затем присвоение соответствующиминдекс, когда вы закончили байт, например:
if (i % 8 == 0)
{
bytebuffer[i / 8 - 1] = byte; // Store completed byte to next index
byte = 0;
}
Если последний байт может быть неполным, вам нужно решить, как с этим справиться (появляются биты пэда слева или справа,последний опущенный байт, поэтому вам не следует округлять распределение и т. д.).