моделирование функции перемещения Delphi-7 в python

#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. Если вам нужно решение, вам действительно следует объяснить на примере, что вы хотите сделать, и объяснить на примерах, что делает ваш код, когда он работает, а когда не работает.