Python通过左移字符串d来显示数据数组

2024-10-03 00:30:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望通过左移str数据来显示数组数据。我写的代码,它的工作部分。代码如下:

这在Python中是可能的吗输出。提供解决方案

response = '62 D9 57 00 00 25 27 00 00 28 77 00 02 4D 27 11 22 33 44'
data = response.split()

index = 3

for i in range(0,3):
    TempMSBData = (data[index])
    print '1st Byte:' + ' ' + TempMSBData
    index = index + 1
    MSBData = (data[index])
    print '2nd Byte:' + ' ' + MSBData
    index = index + 1
    TempLSBData = (data[index])
    print '3rd Byte:' + ' '+ TempLSBData
    index = index + 1
    LSBData = (data[index])
    print '4th Byte:' + ' ' +LSBData
    index = index + 1
    DataResponse =(( int(TempMSBData) << 24)|( int(MSBData) << 16) | ( int(TempLSBData) <<8)| int(LSBData))
    print 'Data_Ary_[{}] = {}'.format(i, DataResponse)

我用Error得到如下输出

1st Byte: 00
2nd Byte: 00
3rd Byte: 25
4th Byte: 27
Data_Ary_[0] = 6427
1st Byte: 00
2nd Byte: 00
3rd Byte: 28
4th Byte: 77
Data_Ary_[1] = 7245
1st Byte: 00
2nd Byte: 02
3rd Byte: 4D
4th Byte: 27

Error is : DataResponse =(( int(TempMSBData) << 24)|( int(MSBData) << 16) | ( int(TempLSBData) <<8)| int(LSBData))
           ValueError: invalid literal for int() with base 10: '4D'

我期望输出如下:

1st Byte: 00
2nd Byte: 00
3rd Byte: 25
4th Byte: 27
Data_Ary_[0] = 2527
1st Byte: 00
2nd Byte: 00
3rd Byte: 28
4th Byte: 77
Data_Ary_[1] = 2877
1st Byte: 00
2nd Byte: 02
3rd Byte: 4D
4th Byte: 27
Data_Ary_[2] = 024D27
1st Byte: 11
2nd Byte: 22
3rd Byte: 33
4th Byte: 44
Data_Ary_[3] = 11223344

Tags: 数据代码dataindexresponsebyteintprint
1条回答
网友
1楼 · 发布于 2024-10-03 00:30:12

如果我理解正确的话,你需要一个十六进制部分的长字符串,把它们分成4组,然后打印十六进制值。你知道吗

您可以使用一个常见的python习惯用法来使用zip()split()分块:

for x in zip(*[iter(data)]*4):

x将以4块的形式迭代数据,例如,第一次循环x = ('00', '00', '25', '27')。您可以解包到您的变量(但我不确定这是否有帮助):

for TempMSBData, MSBData, TempLSBData, LSBData in zip(*[iter(data)]*4):

如果您不需要数值,您可以在字符串中完成这一切,只需lstrip()关闭0

In [1]
response = '62 D9 57 00 00 25 27 00 00 28 77 00 02 4D 27 11 22 33 44'
data = response.split()[3:]
for x in zip(*[iter(data)]*4):
    print(''.join(x).lstrip('0'))

Out[1]:
2527
2877
24D27
11223344

但是,如果您希望它是数字的,那么您可以简单地join部分并转换为int(n, 16)基16。但是,打印出来时需要format()到十六进制x

In [2]:
for x in zip(*[iter(data)]*4):
    print(format(int(''.join(x), 16), 'x'))

Out[2]:
2527
2877
24d27
11223344

您正在获取看到的值,因为您正在以十进制打印:

In [3]:
for x in zip(*[iter(data)]*4):
    print(format(int(''.join(x), 16), 'd'))

Out[3]:
9511
10359
150823
287454020

但是,您的计算不正确,您需要int(x, 16)。你知道吗

要做到这一切,你可以做:

In [4]:
for x in zip(*[iter(data)]*4):
    i = 0
    for n in x:
        i <<= 8
        i |= int(n, 16)
    print(format(i, 'x'))

Out[4]:
2527
2877
24d27
11223344

相关问题 更多 >