2013-02-26 2 views
0

Хотите сделать эквивалент этого, (и обратного toByte) в python, как вы нарисовываете карту в python?Как сопоставить один диапазон значений другому в python

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

я хотел бы попробовать

int([representation],base)-128 

, но я не знаю, что представление и основание

+0

Что выход должен быть? –

+0

Какой здесь язык? –

+3

Вы имеете в виду «сопоставить значение в диапазоне [0: 256] со значением в диапазоне [-128: 128]»? Это будет сопоставление байта без знака ('uint8') с подписанным байтом (' int8')? – heltonbiker

ответ

0

Там больше, чем один из способов сделать это. Можно использовать явное отображение:

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

int([representation],base)-128 Если я хорошо понял ваш вопрос. Если по каким-либо причинам вы не счастливы с функцией, попробуйте использовать питона словарь структуры

+0

не уверен, что представляют и основаны? – holmeswatson

+0

Кто-нибудь знает, что такое представление и база? – holmeswatson

+0

Представление - это то, как вы пишете значение своего байта. Представление = '11111111', а base = 2 вернет вам 255. Вы также можете иметь свой укус в шестнадцатеричном виде, это зависит от того, где он исходит из вашего кода. – chiffa

0

Это не было просто:

def toInt(b): 
    return b-128 

def toByte(i): 
    return i+128 
Смежные вопросы