Можете ли вы просто восстановить строку с помощью срезов, если эта логика последовательна?
s = OrderProduct['OrderProductId'][i]
new_s = s[5]+s[7]+s[1:2]+s[6]+s[4]+s[0]+s[3]+s[1]
или в виде строки формата:
new_s = '{}{}{}{}{}{}{}'.format(s[5],s[7]...)
Редактировать: +1 для предложения Дэйва о '.join () список против конкатенации.
Самая маленькая сумма битов, к которым можно получить доступ и сохранение, равняется 8 = 1 байт. Можно получить доступ к битам в байте с помощью разрядных операторов ^ и |.
Можно установить бит n'th на 1 использование:
my_byte = my_byte | (1 << n);
где n от 0 до 7.
Можно установить бит n'th на 0 использований:
my_byte = my_byte & ((~1) << n);
Можно переключиться, n'th укусил использование:
my_byte = my_byte ^ (1 << n);
Больше деталей здесь.
Нет, самый маленький объем данных, который можно записать в файл, составляет один байт.
Можно использовать bitset, чтобы сделать биты управления легче, затем использовать ofstream для записи в файл. Если Вы не хотите использовать bitset, можно использовать побитовые операторы для управления данными прежде, чем сохранить его.
ответ klew является, вероятно, тем, который Вы хотите, но только добавить что-то к тому, что сказал Bill, библиотеки Boost имеют dynamic_bitset, который я нашел полезным в аналогичной ситуации.
Вся информация, в которой Вы нуждаетесь на битовом жонглировании, здесь:
Как Вы устанавливаете, очищаете и переключаете единственный бит?
Но самый маленький объект, что можно вставить файл, является байтом.
Я использовал бы dynamic_bitset и каждый раз, когда размер стал больше, чем 8, извлекают нижнюю часть 8 битов в символ и пишут это в файл, затем смещают остающиеся биты вниз 8 мест (повторение).
Нет. Необходимо будет упаковать байты. Соответственно, Вам будет нужен заголовок в Вашем файле, который указывает, сколько элементов находится в Вашем файле, потому что у Вас, вероятно, будет запаздывание битов, которые не использованы.