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>