#python #byte #decode #encode #codepages
Вопрос:
Я хочу смоделировать процедуру перемещения Delphi-7 с помощью python,
procedure Move(const SourcePointer; var DestinationPointer; CopyCount : Integer ) ;
Переместите количество копий в байтах из источника в Dest. Проверка дальности не выполняется. Перемещение компенсирует перекрытия между исходным и целевым блоками.
Это мой код на python :
def move(src, cnt):
src_bit = "{0:b}".format(src)
src_byte = bytes([int(src_bit[i:i 8], 2) for i in range(0, len(src_bit), 8)])[:cnt]
return str(src_byte[::-1], 'cp1256')
Для этого сначала я преобразовал данные в двоичный код, затем создал байт из этих битов и, наконец, декодировал двоичный код с помощью кодовой страницы cp1256. эта функция работает только для части данных, и я думаю, что проблема непокрытия всех данных связана с кодовой страницей, которую я использовал. Я попытался использовать несколько разных кодовых страниц, но не решил свою проблему 🙁
Комментарии:
1. Это не вопрос Delphi, пожалуйста, удалите теги delphi и delphi-7. Просто определите, что делает функция перемещения, чтобы эксперт по python мог вам помочь. Затем объясните, что не так с вашей функцией, которая работает только для части моих данных .
2. Я отредактировал ваш вопрос, чтобы заменить ваше неправильное определение перемещения правильным для документации . И вам следует отредактировать свой вопрос, чтобы лучше объяснить, какое использование вы хотите. Похоже, это связано со строковыми манипуляциями (Delphi Move-это функция перемещения памяти общего назначения, такая же, как C memmove (), и не имеет ничего общего с кодовой страницей).
3. @fpiette tnx за редактирование моего вопроса, как я уже сказал, я пытаюсь смоделировать процедуру ПЕРЕМЕЩЕНИЯ. как вы знаете, процедура ПЕРЕМЕЩЕНИЯ перемещает определенный байт из источника в место назначения на уровне памяти, затем преобразует или, лучше сказать, извлекает байты в качестве значения символа. в функции Python, которую я определил, я попытался смоделировать это преобразование в памяти, для этого сначала я преобразовал данные в бит, затем из-за того, что тип char имеет 1-байтовое пространство в памяти, я разделил биты на наборы по 8 бит для создания байтов и, наконец, преобразовал эти байты в символы.
4. Я сказал, что, по-моему, эта проблема связана с кодовой страницей, которую я использовал, потому что моделирование на уровне битов и байтов работает правильно, но при попытке преобразовать байт в символ возникает проблема.
5. Если вам нужно решение, вам действительно следует объяснить на примере, что вы хотите сделать, и объяснить на примерах, что делает ваш код, когда он работает, а когда не работает.