MATLAB и Python решения эквивалентны.
Единственное отличие, которое я заметил, состоит в том, что результат MATLAB относится к классу double
, а в Python элементы ndarray имеют тип uint8
.
(различия в типах, вероятно, не имеют значения).
Есть небольшие проблемы с отправленным вами примером кода, который делает его неисполняемым:
- Код MATLAB должен быть:
dec2hex(startAddress, 8)
вместо dec2hex(address, 8)
. - Код Python должен быть:
np.frombuffer(address,
вместо np.frombuffer(addressMsg,
.
Вы можете получить тот же результат, используя более простой код:
В MATLAB вы можете использовать typecast
:
address = double(typecast(uint32(startAddress), 'uint8')');
Пример кода для тестирования :
startAddress = hex2dec('12345678');
address = hex2dec(flipud((reshape(dec2hex(startAddress, 8), 2, 4))'));
address2 = double(typecast(uint32(startAddress), 'uint8')');
В Python можно использовать struct.pack
:
address = np.frombuffer(struct.pack("<I", startAddress), np.uint8).reshape(4,1)
Пример кода для тестирования:
startAddress = int('12345678', 16)
address = startAddress.to_bytes(8, 'little')
address = np.frombuffer(address, dtype=np.uint8)
address = address[0:4].reshape(4,1)
# Convert startAddress array of 4 uint8 elements (apply little endian format).
address2 = np.frombuffer(struct.pack("<I", startAddress), np.uint8).reshape(4,1)
Результат выполнения MATLAB:
address =
120
86
52
18
address2 =
120
86
52
18
Python Результат выполнения:
address
array([[120],
[ 86],
[ 52],
[ 18]], dtype=uint8)
address2
array([[120],
[ 86],
[ 52],
[ 18]], dtype=uint8)