У меня есть python -обернутый объект C ++, базовыми данными которого является контейнер std::vector<T>
, представляющий биты. У меня есть функция, которая записывает эти биты в объект PyBytes. Если порядок байтов тот же, то проблем нет. Однако, если я буду sh записывать байты с другим порядком байтов, то мне нужно будет поменять биты (или поменять байты) каждое слово.
В идеале я мог бы передать итератор вывода конструктору PyBytes_FromString
, где оператор вывода просто преобразует порядковый номер каждого слова. Это будет O(1)
дополнительная память, которая является целью.
Менее в идеале я мог бы каким-то образом создать пустой объект PyBytes, вручную создать массив char
с разным порядком байтов и каким-то образом назначить его объекту PyBytes (в основном, переопределить конструкторы PyBytes ). Это также будет O(1)
дополнительная память. К сожалению, способ сделать это - использовать _PyBytes_FromSize
, но это не доступно в API.
Текущий способ сделать это - создать полную копию перевернутых слов, просто затем скопировать это представление по отношению к представлению объектов PyBytes.
Я думаю, что второй вариант является наиболее практичным способом сделать это, но единственный способ увидеть, как работает, - это просто скопировать функцию _PyBytes_FromSize
в мой источник код, который кажется взломанным. Я новичок в python - C API и мне интересно, есть ли более чистый способ сделать это.