首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >( Python)将大端转换为小端

( Python)将大端转换为小端
EN

Stack Overflow用户
提问于 2022-06-10 08:49:50
回答 4查看 1.5K关注 0票数 1

我有一个包含十六进制字符串(约2,000个字节)的文件( .vcon )存储在大端点中,并希望根据规则集将该文件转换为小endian十六进制字符串.vcon文件。

在一个列表中,有四个可能的值: 8,16,32,64,如果一个列表中的数字是8,那么就不需要滑动(从大到小的endian),因为数据是一个字节。除了8,数据必须从大到小的终端。

我想不出办法来解决这个问题。

例如,如果我在.vcon文件(大端)中的数据如下所示

代码语言:javascript
复制
F324658951425AF3EB0011

名单中的数字如下

代码语言:javascript
复制
[16, 8, 8, 32, 8, 16] 

那么,我们创建的结果数据应该如下所示(对于小endian)

代码语言:javascript
复制
24F36589F35A4251EB1100

如何迭代列表中的数字,同时访问十六进制字符串文件(即大端格式)中的每个字节,并以小endian格式创建新的十六进制字符串文件?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-06-10 09:39:22

使用字节数组(在网上试试!):

代码语言:javascript
复制
data = "F324658951425AF3EB0011"
bits = [16, 8, 8, 32, 8, 16]

b = bytearray.fromhex(data)
i = 0
for n in bits:
    n //= 8
    b[i:i+n] = reversed(b[i:i+n])
    i += n
print(b.hex().upper())

或者使用内存视图(在网上试试!):

代码语言:javascript
复制
data = "F324658951425AF3EB0011"
bits = [16, 8, 8, 32, 8, 16]

b = bytearray.fromhex(data)
m = memoryview(b)
for n in bits:
    n //= 8
    m[:n] = m[n-1::-1]
    m = m[n:]
print(b.hex().upper())
票数 0
EN

Stack Overflow用户

发布于 2022-06-10 09:10:46

我可能会循环您的rule列表(您的16,8,8,32,8,16)。对于rule中的每个元素,从.vcon中提取rule[i]/8参数,并将这些参数按相反顺序添加到result中。

就像这样:

代码语言:javascript
复制
rule = [16, 8, 8, 32, 8, 16] 
bigE = 'F324658951425AF3EB0011'
littleE = ''

for x in rule:
    n = x//4
    word, bigE = bigE[:n], bigE[n:]
    for i in range(x//8):        
        word, byte = word[:-2], word[-2:]
        littleE += byte
        
print(littleE)
票数 0
EN

Stack Overflow用户

发布于 2022-06-10 09:13:15

以下是一种简单但有效的方法:

代码语言:javascript
复制
hs = 'F324658951425AF3EB0011'
m = [16, 8, 8, 32, 8, 16]
idx = 0
result = ''
for w in m:
    match w:
        case 8:
            result += hs[idx:idx+2]
        case 16:
            result += hs[idx+2:idx+4] + hs[idx:idx+2]
        case 32:
            result += hs[idx+6:idx+8] + hs[idx+4:idx+6] + hs[idx+2:idx+4] + hs[idx:idx+2]
    idx += w // 4
print(result)

输出:

代码语言:javascript
复制
24F36589F35A4251EB1100
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72571540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档