16 -> 10
Михаил; 3.9.04

Люди! не подскажите как на VBS преобразовать из 16-ого числа в 10-ое?

В PLC формат DATE_AND_TIME числа в декодах, а когда считываешь то они становятся нереальными :-/

нужно обязательно на VBS...
на С то все просто: sprintf(buf,"%x",chislo);
Re: 16 -> 10
Ирина; 3.9.04

Function HexToDec(Byval dig)

Dim i
Dim str

str = 0
dec = 0

For i = 1 To Len(dig)
str = -1
If(Asc(UCase(Mid(dig, i, 1))) >= 48 And Asc(UCase(Mid(dig, i, 1))) <= 57) Then
str = Asc(UCase(Mid(dig, i, 1)))-48
End If
If(Asc(UCase(Mid(dig, i, 1))) >= 65 And Asc(UCase(Mid(dig, i, 1))) <= 70) Then
str = Asc(UCase(Mid(dig, i, 1)))-55
End If
If(str = -1) Then
MsgBox "!!!"
End If
str = str * (16^(Len(dig)-i))
dec = dec + str
Next

End Function
Re: 16 -> 10
-> Ирина; 3.9.04

Канечно большое спасибо что ответили, но мне немого другое нада...


число 31 отображается в PLC в декодах, т.е. есил его считать, то будет 49. Т.е. мне надо преобразовать число 49 в 31. как бы наоборот :)

мне канечно лень но придется наверное самому писать... (методом деления на 16) я думал что есть ченить уже написаное в VBS
Re: 16 -> 10
-> Ирина; 3.9.04

мне вот че нада было:

Function HexToInt(Byval dig)
Dim str,dec
dec=dig
str = ""
Do
dec = dec Mod 16
str = str + String(1,dec+48)
dec = (dig - dec) / 16
Loop While dec > 15
str = str + String(1,dec+48)
str = StrReverse(str)
HexToInt = str
End Function
Re: 16 -> 10
Л. Шерешевский; 3.9.04

Вот одно непонятно: неужели никак нельзя обойтись без сетевого сленга, характерного для малолеток, бравирующих своей безграмотностью и пренебрежением к русскому языку?


Теперь к существу дела.

1. Вопрос был поставлен некорректно. На самом деле требовалось найти способ преобразования числа из формата BCD (Binary-Coded Decimal) в формат обычного десятичного числа. Шестнадцатиричный формат здесь ни при чем.

2. В результате выполнения sprintf(buf, "%x", number); в buf будет помещена строка, содержащая шестнадцатиричное представление числа. К преобразованию из BCD это не имеет никакого отношения.

3. В WinCC все делается проще. Достаточно при описании внешних тегов, связанных с элементами DATE_AND_TIME, в поле 'Adapt format' диалога настройки тега выбрать соответствующее преобразование, например, WordToBCDWord.

4. Чтобы функция, предложенная Ириной, заработала, в нее в качестве последней операции надо добавить строку HexToDec = dec
-> Л. Шерешевский;
миша; 5.9.04

:-)

1. глубоко извиняюсь за свою безграмотность (ну привык я в icq так писать, тут уж не переделаешь меня наверное), а насчет некорректности вопроса - да это так.
А за совет огромное спасибо, так и сделаю.

2. Не будете ли Вы так любезны проконсультировать меня еще по одному вопросу:
а. почему когда у меня при вызове функции приведенной ниже русские буквы отображаются совсем не русскими :) (а закорючками разными)??? а если взять этот код и вставить непосредственно в текст обработки события то с русскими буквами все нормально становится. :-/
(английские буквы отображаются нормально)
Function GetErrorMessage(Byref j, Byref i)

Dim mess(100),buf
Dim m1(8),m2(4),m3(10), m4(7), m5(5)
m1(0) = "резерв"
m1(1) = "< LL"
m1(2) = "< L"
m1(3) = "> H"
m1(4) = "> HH"
m1(5) = "Нет сигнала"
m1(6) = "Ошибка сигнала"
m1(7) = "Нет связи"

.......

If i < 17 Then
buf = m1(j)
End If

If i > 20 And i < 27 Then
buf = m2(j)
End If

If i > 30 And i < 53 Then
buf = m3(j)
End If

If i > 60 And i < 82 Then
buf = m4(j)
End If

If i > 90 And i < 95 Then
buf = m5(j)
End If

GetErrorMessage = mess(i) + buf
If i < 17 Then
buf = m1(j)
End If

If i > 20 And i < 27 Then
buf = m2(j)
End If

If i > 30 And i < 53 Then
buf = m3(j)
End If

If i > 60 And i < 82 Then
buf = m4(j)
End If

If i > 90 And i < 95 Then
buf = m5(j)
End If
GetErrorMessage = mess(i) + buf
If i < 17 Then
buf = m1(j)
End If

If i > 20 And i < 27 Then
buf = m2(j)
End If

If i > 30 And i < 53 Then
buf = m3(j)
End If

If i > 60 And i < 82 Then
buf = m4(j)
End If

If i > 90 And i < 95 Then
buf = m5(j)
End If

GetErrorMessage = mess(i) + buf
If i < 17 Then
buf = m1(j)
End If

If i > 20 And i < 27 Then
buf = m2(j)
End If

If i > 30 And i < 53 Then
buf = m3(j)
End If

If i > 60 And i < 82 Then
buf = m4(j)
End If

If i > 90 And i < 95 Then
buf = m5(j)
End If

GetErrorMessage = mess(i) + bufIf i < 17 Then
buf = m1(j)
End If

If i > 20 And i < 27 Then
buf = m2(j)
End If

If i > 30 And i < 53 Then
buf = m3(j)
End If

If i > 60 And i < 82 Then
buf = m4(j)
End If

If i > 90 And i < 95 Then
buf = m5(j)
End If

GetErrorMessage = mess(i) + buf
End Function
-> Л. Шерешевский;
миша; 5.9.04

:-)

1. глубоко извиняюсь за свою безграмотность (ну привык я в icq так писать, тут уж не переделаешь меня наверное), а насчет некорректности вопроса - да это так.
А за совет огромное спасибо, так и сделаю.

2. Не будете ли Вы так любезны проконсультировать меня еще по одному вопросу:
а. почему когда у меня при вызове функции приведенной ниже русские буквы отображаются совсем не русскими :) (а закорючками разными)??? а если взять этот код и вставить непосредственно в текст обработки события то с русскими буквами все нормально становится. :-/
(английские буквы отображаются нормально)
Function GetErrorMessage(Byref j, Byref i)

Dim mess(100),buf
Dim m1(8),m2(4),m3(10), m4(7), m5(5)
m1(0) = "резерв"
m1(1) = "< LL"
m1(2) = "< L"
m1(3) = "> H"
m1(4) = "> HH"
m1(5) = "Нет сигнала"
m1(6) = "Ошибка сигнала"
m1(7) = "Нет связи"

.......

If i < 17 Then
buf = m1(j)
End If

If i > 20 And i < 27 Then
buf = m2(j)
End If

If i > 30 And i < 53 Then
buf = m3(j)
End If

If i > 60 And i < 82 Then
buf = m4(j)
End If

If i > 90 And i < 95 Then
buf = m5(j)
End If

GetErrorMessage = mess(i) + buf
End Function<<br>