2015-06-17 3 views
0

Я конвертирую некоторые программы из Visual Basic 6.0 в Python, и я застрял в одной строке в VB.Какая функция существует в эквиваленте Python для Val() в VB6?

Visual Basic код:

bAddStart = "100" 
bNoOfBytes = "94" 
MeterId = 1 

Data = Chr(MeterId) + Chr(3) + Chr(Val(bAddStart) \ 256) + Chr(Val(bAddStart) Mod 256) + Chr(0) + Chr(Val(bNoOfBytes)) 

Для функции Chr в VB Я использую chr() в Python.
Для функции Val, аналогичной функции в Python?

+0

float (expression) возможно? –

+2

Функция Val в VB 6 сложнее, чем может показаться. Вполне возможно, что в Python нет точного эквивалента. Я предлагаю вам рассмотреть тип данных bAddStart и bNoOfBytes и какие значения они могут содержать. Затем выберите код Python, который будет надежно преобразовывать эти значения в числа, которые могут использоваться в вашем выражении. Я вижу, что вы говорите, что переменные являются строками. В этом случае вы также можете проверить их, прежде чем пытаться преобразовать их в числа. – Blackwood

+3

Вместо перевода * «слово за словом» * вы могли бы лучше понять, есть ли в Python совершенно лучший подход. – jonrsharpe

ответ

0

попробовать int(bNoOfBytes)

например: chr(int("65")) вернется A.

+0

Я знаю, что функция chr() в python ... скажите мне функцию Val() в python ...? – siddaramesh

+0

Я уже говорил об этом: используйте 'int'. Конструктор 'int' пытается преобразовать строковый аргумент в целое число. Остерегайтесь, если целое число больше 255 (или отрицательное), 'chr' будет повышаться. В качестве примера для кода VB, который вы опубликовали, его перевод на python присваивает 'Data' значение:' \ x01 \ x03 \ x00d \ x00^' – CristiFati

1

Там нет нетых встроенных функций в питоне, что эквивалентно Val(). Вам нужно будет реализовать свою собственную функцию. Я использовал этот код, когда раньше сталкивался с подобной проблемой -

def val(data): 
    y=0 
    nst="" 
    dlist = ['0','1', '2', '3', '4', '5', '6', '7', '8', '9'] 
    for x in data: 
     for i in dlist: 
      if x == i: 
       nst=nst+x 
    n=len(nst) 
    dcont=n 
    acum=0 
    for z in range(n): 
     y=0 
     for i in dlist: 
      if nst[z] == i: 
       d=y 
       mult=1 
       dcont=dcont-1 
       for j in range(dcont): 
        mult=mult*10 
       acum=acum+(d*mult) 
      y=y+1 

    return acum 
+0

Ваша вторая функция возвращает' 0' для ввода '' 1234 123th Street NE «когда согласно документам он должен возвращать' '1234123'' – IanAuld

Смежные вопросы