【问题标题】:2`s complement error in pythonpython中2的补码错误
【发布时间】:2016-05-09 13:14:03
【问题描述】:

我正在尝试从串行端口读取 3 字节 2 的补码值,并且我正在尝试绘制该值,为此我使用以下

out=  BitArray(int = value_1, length = 24).int

当我传递 0x7FFFFF 中的值而不是 value_1 时,我得到了正确的结果,即 8388607

如果我尝试从串行端口 (value_1) 中获取值并将其传递到上述行,我将收到以下错误

CreationError: 7fffff 对于长度为 24 的位串来说太大了一个有符号整数。允许的范围是 [-8388608, 8388607]。

如果我在发送 value_1 进行处理之前打印它会打印 7fffff

请让我知道上面的值传递有什么问题

【问题讨论】:

  • 如果你print type(value_1),你会得到什么? - 在您的问题中提到 BitArray 来自位串库可能会有所帮助,因为许多人可能没有安装它以及 如何您正在从串行端口读取。
  • 当我使用 print type(value_1) 输出是
  • 我正在使用以下行从串口读取数据input_data = ser.read(3) Received_Data.append(input_data.encode("hex"))

标签: python bitarray


【解决方案1】:

由于您从串行库中获取的值是一个字符串,因此您需要告知 BitArray 表示并去掉 int=

from bitstring import BitArray
i = '7FFFFF'
BitArray('0x%s' % i, length=24).int # Returns 8388607
i = '8FFFFF'
BitArray('0x%s' % i, length=24).int # Returns -7340033
i = 'FFFFFF'
BitArray('0x%s' % i, length=24).int # Returns -1

【讨论】:

  • @VijayR - 如果可行,如果您认为可能有另一个更好答案和/或标记为已回答 - 这样,如果其他人遇到类似问题,他们就可以看到什么有效。
  • @史蒂夫,我认为我没有投票的特权,我对这个网站很陌生
  • @VijayR 既然这是您的问题,您必须有能力将其标记为您的答案。
  • 或者只是 BitArray(hex=i).int 在这些情况下工作正常。
猜你喜欢
  • 2016-03-31
  • 2014-11-14
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多