【问题标题】:How do I map one range of values to another in python如何在python中将一个范围的值映射到另一个范围
【发布时间】:2013-02-26 18:07:55
【问题描述】:

想在python中做这个等价的(和逆toByte),你如何在python中映射?

int toInt(byte b) {
  return map(b, 0, 255, -128, 127);
}

我会试试的

int([representation],base)-128 

但我不知道什么是表示和基础

【问题讨论】:

  • 输出应该是什么?
  • 这里的原文是什么?
  • 您的意思是“将 [0:256] 范围内的值映射到 [-128:128] 范围内的值”?那会将无符号字节(uint8)映射到有符号字节(int8)?
  • c++ (arduino)。输入是 0 到 255 之间的值,输出是 -128 到 127 范围内的值,具有等效位置

标签: python map int byte


【解决方案1】:

int([representation],base)-128 如果我理解你的问题。 如果您出于某种原因对函数不满意,请尝试使用 python 字典结构

【讨论】:

  • 有人知道什么是表示和基础吗?
  • 表示是您写入字节值的方式。 representation='11111111' 和 base=2 将返回 255。您也可以使用十六进制,这取决于它在您的代码中的来源。
【解决方案2】:

有不止一种方法可以做到这一点。您可以使用显式映射:

INT_MAP = {x: x - 128 for x in range(256)}
def to_int(val):
    """Maps an unsigned integer to a signed one (for values up to 256)"""
    try:
        return INT_MAP[val]
    except KeyError:
        raise ValueError("val must be a value between 0 and 255")

或者,您可以使用数学:

def to_int(val, max_signed_val=128):
    max_val = max_signed_val * 2
    assert val < max_val, "val must be less than {:d}".format(max_val)
    return val - max_signed_val

【讨论】:

    【解决方案3】:

    不就是这样吗:

    def toInt(b):
        return b-128
    
    def toByte(i):
        return i+128
    

    【讨论】:

      猜你喜欢
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2021-01-16
      • 2021-10-11
      相关资源
      最近更新 更多