>>> import sys
>>> 1 .to_bytes(2, sys.byteorder)
b'\x01\x00' # от "младшего к старшему"
>>> 1 .to_bytes(2, 'big')
b'\x00\x01' # "от старшего к младшему"
>>> int.from_bytes(_, 'little') # интепретируя как от "младшего к старшему"
256
def reverse(input):
L = len(input)
if L%2 <> 0:
return 'Error' #Ошибка в случае когда L не кратно 2
else:
Res = ''
L = L//2
for i in range(L):
T = input[i*2] + input[i*2+1]
Res = T + Res
T = ''
return(Res);
Arr- 你的数字数组(字符串数组,例如A1F6...,在你的情况下,每个字符串的形式)A65D
调用代码:
ArrLength = len(Arr)
for i in range(ArrLength):
Arr[i] = reverse(Arr[i])
from struct import pack, unpack
def reorder_bytes( value ):
return unpack( "H", pack( "H", value )[::-1] )[0]
# модуль struct используется для конвертации С структур в python объекты
# H --- unsigned int16
# pack с "H" сконвертирует python int в бинарную строку длиной в 2 байта, соответствующую Си представление unsigned int16
# unpack возвращает tuple из распакованных данных, нужный нам результат будет в первом элементе.
数字有点魔力。首先,让我们将一个双字节数字拆分
value为两个单字节数字:现在让我们把它组装回一个两字节的:
因此,如果我们将 shorter 写成一个函数:
通过将此函数应用于列表的所有元素,例如使用
map,我们得到一个完整的解决方案。注 1:为了提高性能,这应该按照逻辑位运算来编写,替换
i // 256为i >> 8、和:i * 256i << 8+|注意:注意操作顺序,如果括号放置不正确或根本没有放置,可能会得到意想不到的结果。
注 2:这里另一个可能的优化是记忆。如果此函数需要多次应用,将所有双字节数字的结果一次保存到一个数组中,并用从该数组中获取所需元素代替函数调用会更快。
更新:
假设
MyArray有一个存储在 中的双字节数字列表int。然后新数组将如下所示:map将对每个元素应用改变字节位置的功能MyArray。list将列出它。给定
array一个数组,其中每个元素至少存储两个字节,要更改字节顺序,调用array.byteswap()以下方法就足够了:可以看出,数字是使用本机字节顺序存储在数组中的(在我的系统上从“最低到最高”
sys.byteorder等于)。'little'调用后,.byteswap()字节顺序变为“从高到低”,这改变了存储的值(总是sys.byteorder在解释中):相同的 API 适用于
numpy数组:可以看出,获得了相同的结果。
如果您有一个带有 Python 数字的 Python 列表
[1, 32767],那么字节顺序的概念就没有多大意义。Python int 在内存中的实际表示方式取决于实现,并且与大多数应用程序无关。例如,在CPython中,它int由-sys.int_info.bits_per_digit位数字组成,每个数字占一个sys.int_info.sizeof_digit字节,这些数字从低位到高位,Python绝对值int为:Arr- 你的数字数组(字符串数组,例如A1F6...,在你的情况下,每个字符串的形式)A65D调用代码:
您可以尝试将 Python 元素“序列化”为二进制 C-s 表示,然后交换字节。
我假设元素存储为数字。