【问题标题】:python byte array print() gives wrong valuespython字节数组print()给出错误的值
【发布时间】:2018-12-18 21:42:38
【问题描述】:

使用 python 3,我制作了以下脚本,该脚本由一个包含数百个字节数组的模型类组成,并且在模型类之外的同一个脚本中,我将其中的一些打印出来以验证它们是否正确。当我打印一些值时,一些值不是我所期望的。(我在下面的代码中放置了编码的 cmets 来识别这些值)

这是我的脚本的简化版本,其中包含一些字节数组

`
class Model:
    def __init__(self):

        # weird values:
        self.bp_diastole_118 = bytearray(b'\xff\x01\x02\x01\x01\x00\x02\x3b')
        self.bp_diastole_120 = bytearray(b'\xff\x01\x02\x01\x01\x00\x02\x3c')
        self.bp_diastole_122 = bytearray(b'\xff\x01\x02\x01\x01\x00\x02\x3d')
        self.bp_diastole_124 = bytearray(b'\xff\x01\x02\x01\x01\x00\x02\x3e')
        self.bp_diastole_126 = bytearray(b'\xff\x01\x02\x01\x01\x00\x02\x3f')
        self.bp_diastole_128 = bytearray(b'\xff\x01\x02\x01\x01\x00\x02\x40')
        self.bp_diastole_160 = bytearray(b'\xff\x01\x02\x01\x01\x00\x02\x50')

        # correct values:
        self.pupil_r_normal = bytearray(b'\xff\x01\x02\x01\x01\x00\x03\xc3')
        self.pupil_r_dilated = bytearray(b'\xff\x01\x02\x01\x01\x00\x03\xc4')
        self.pupil_r_constriced = bytearray(b'\xff\x01\x02\x01\x01\x00\x03\xc5')
        self.pupil_r_reaction_on = bytearray(b'\xff\x01\x02\x01\x01\x00\x03\xc6')
        self.pupil_r_reaction_off = bytearray(b'\xff\x01\x02\x01\x01\x00\x03\xc7')




m = Model()  

print('--------------weird value------------------')
print('bp_diastole_118 = {}'.format(m.bp_diastole_118))
print('bp_diastole_120 = {}'.format(m.bp_diastole_120))
print('bp_diastole_122 = {}'.format(m.bp_diastole_122))
print('bp_diastole_124 = {}'.format(m.bp_diastole_124))
print('bp_diastole_126 = {}'.format(m.bp_diastole_126))
print('bp_diastole_128 = {}'.format(m.bp_diastole_128))
print('bp_diastole_160 = {}'.format(m.bp_diastole_160))

print('-------------correct value--------------------')
print('pupil_r_normal = {}'.format(m.pupil_r_normal))
print('pupil_r_dilated = {}'.format(m.pupil_r_dilated))
print('pupil_r_constriced = {}'.format(m.pupil_r_constriced))
print('pupil_r_reaction_on = {}'.format(m.pupil_r_reaction_on))
print('pupil_r_reaction_off = {}'.format(m.pupil_r_reaction_off))

这是打印到控制台的内容:

`
--------------weird value------------------
bp_diastole_118 = bytearray(b'\xff\x01\x02\x01\x01\x00\x02;')
bp_diastole_120 = bytearray(b'\xff\x01\x02\x01\x01\x00\x02<')
bp_diastole_122 = bytearray(b'\xff\x01\x02\x01\x01\x00\x02=')
bp_diastole_124 = bytearray(b'\xff\x01\x02\x01\x01\x00\x02>')
bp_diastole_126 = bytearray(b'\xff\x01\x02\x01\x01\x00\x02?')
bp_diastole_128 = bytearray(b'\xff\x01\x02\x01\x01\x00\x02@')
bp_diastole_160 = bytearray(b'\xff\x01\x02\x01\x01\x00\x02P')
-------------correct value--------------------
pupil_r_normal = bytearray(b'\xff\x01\x02\x01\x01\x00\x03\xc3')
pupil_r_dilated = bytearray(b'\xff\x01\x02\x01\x01\x00\x03\xc4')
pupil_r_constriced = bytearray(b'\xff\x01\x02\x01\x01\x00\x03\xc5')
pupil_r_reaction_on = bytearray(b'\xff\x01\x02\x01\x01\x00\x03\xc6')
pupil_r_reaction_off = bytearray(b'\xff\x01\x02\x01\x01\x00\x03\xc7')

正如您所见,良好的值完全符合我的预期,并且与我初始化的值相同。但是,如果您查看从奇怪值打印的内容,您会发现最后 3 个字符与我初始化的值不匹配。


初始化:
self.bp_diastole_118 = bytearray(b'\xff\x01\x02\x01\x01\x00\x02\x3b')
和印刷不一样:
bp_diastole_118 = bytearray(b'\xff\x01\x02\x01\x01\x00\x02;')

有人知道为什么会发生这种情况以及我该如何解决这个问题吗?

【问题讨论】:

  • 您在打印输出中交换了“正确”和“奇怪”的值与您的代码应该做的事情,这有点令人费解。你确定你使用的是你粘贴的代码和你得到的输出吗?
  • 旁注:m = ModelSmartStat() 应该是m = Model()
  • 哎呀,我忘了把那部分改成缩短的。感谢您指出了这一点。生病修复它。 @Xion
  • 我交换了它们,以便它们与模型类显示的内容相匹配,认为它可以帮助人们在视觉上理解。我忘了交换打印功能,抱歉我也解决了这个问题@Torxed

标签: python arrays python-3.x format byte


【解决方案1】:

您看到的是您设置的十六进制值的 utf 表示形式,例如 utf('0x3b') == ';'

【讨论】:

  • 这只是打印 bytearray 对象的结果吗?我的意思是对象的值实际上并没有改变,它只是以我不想要的格式打印?稍后当我到达我的工作站时,我将尝试对此进行测试。感谢您为我指明开始的道路,谷歌搜索 bytearray 并阅读我找不到任何东西的文档。
  • 正好是我运行的例子,你可以看到正确的值被保存:n [21]: x = bytearray(b'\x3b') In [22]: x Out[22]: bytearray(b';') In [23]: x[0] Out[23]: 59
【解决方案2】:

我发现的问题是 x3b 到 x50,它们似乎将最后一部分作为特殊字符输出,其中 x50 为 P。如果您使用 bytearray(b'\x3b') 进行测试,它将为您显示结尾

【讨论】:

  • 这就是我使用我提供的代码打印它们时所看到的。
猜你喜欢
  • 1970-01-01
  • 2020-10-10
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 2019-07-14
相关资源
最近更新 更多