Как мне поместить определенные шестнадцатеричные значения в массив в определенной начальной точке в Python

#python #arrays #emulation

#python #массивы #эмуляция

Вопрос:

Я начинаю создавать эмулятор, и я инициализировал 4096 байт ОЗУ в Python как: memory = [0] * 4096 . Теперь у меня есть массив шестнадцатеричных значений, которые мне нужно сохранить в 0x50 (80-е значение в массиве). Как я смогу вставить свой список значений в 0x50? Спасибо!

Редактировать:

Поняв, что я не включил достаточно информации, вот часть моего кода:

 memory[80] = [0xF0, 0x90, 0x90, 0x90, 0xF0,
                      0x20, 0x60, 0x20, 0x20, 0x70,
                      0xF0, 0x10, 0xF0, 0x80, 0xF0,
                      0xF0, 0x10, 0xF0, 0x10, 0xF0,
                      0x90, 0x90, 0xF0, 0x10, 0x10,
                      0xF0, 0x80, 0xF0, 0x10, 0xF0,
                      0xF0, 0x80, 0xF0, 0x90, 0xF0,
                      0xF0, 0x10, 0x20, 0x40, 0x40,
                      0xF0, 0x90, 0xF0, 0x90, 0xF0,
                      0xF0, 0x90, 0xF0, 0x10, 0xF0,
                      0xF0, 0x90, 0xF0, 0x90, 0x90,
                      0xE0, 0x90, 0xE0, 0x90, 0xE0,
                      0xF0, 0x80, 0x80, 0x80, 0xF0,
                      0xE0, 0x90, 0x90, 0x90, 0xE0,
                      0xF0, 0x80, 0xF0, 0x80, 0xF0,
                      0xF0, 0x80, 0xF0, 0x80, 0x80]
 

Что я сделал, так это добавил 80 внутри скобок, и после распечатки массива кажется, что он печатается с 80-м значением. Это то, что я хочу, но я все еще не уверен, удовлетворит ли сохранение моих значений в 80-м члене в массиве начальному местоположению памяти 0x50, которое мне нужно для моего эмулятора. Итак, теперь я предполагаю, что мой вопрос заключается в том, имеет ли Python дело с расположением шестнадцатеричных значений внутри массивов.

Комментарии:

1. [0] значительно больше одного байта, хотя, конечно, если вы просто хотите использовать список для имитации памяти, это нормально.

2. Как выглядят ваши «шестнадцатеричные значения» и что вы пробовали? Установка элемента массива с определенным индексом должна быть очевидной, если вы знаете, что такое массивы,

Ответ №1:

Что делает ваш код, так это записывает список в 80-е место памяти.

Если вы планируете выполнять этот тип присваивания один раз, сделайте это:

 memory[80:160] = [0xF0, 0x90, 0x90, 0x90, 0xF0,
                      0x20, 0x60, 0x20, 0x20, 0x70,
                      0xF0, 0x10, 0xF0, 0x80, 0xF0,
                      0xF0, 0x10, 0xF0, 0x10, 0xF0,
                      0x90, 0x90, 0xF0, 0x10, 0x10,
                      0xF0, 0x80, 0xF0, 0x10, 0xF0,
                      0xF0, 0x80, 0xF0, 0x90, 0xF0,
                      0xF0, 0x10, 0x20, 0x40, 0x40,
                      0xF0, 0x90, 0xF0, 0x90, 0xF0,
                      0xF0, 0x90, 0xF0, 0x10, 0xF0,
                      0xF0, 0x90, 0xF0, 0x90, 0x90,
                      0xE0, 0x90, 0xE0, 0x90, 0xE0,
                      0xF0, 0x80, 0x80, 0x80, 0xF0,
                      0xE0, 0x90, 0x90, 0x90, 0xE0,
                      0xF0, 0x80, 0xF0, 0x80, 0xF0,
                      0xF0, 0x80, 0xF0, 0x80, 0x80]
 

где первое — это начальная позиция, а второе — начальная позиция длина добавленной памяти.

Но если вы планируете часто делать подобные вещи, вероятно, хорошей идеей будет использовать функцию, подобную этой:

 def insert(pos, l):
    global memory
    memory[pos:pos len(l)] = l