#vb.net
#vb.net
Вопрос:
Вы не можете проголосовать за свой собственный пост 0
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Public Class SNMP
Public Sub New()
End Sub
Public Function [get](ByVal request As String, ByVal host As String, ByVal community As String, ByVal mibstring As String) As Byte()
Dim packet As Byte() = New Byte(1023) {}
Dim mib As Byte() = New Byte(1023) {}
Dim snmplen As Integer
Dim comlen As Integer = community.Length
Dim mibvals As String() = mibstring.Split("."c)
Dim miblen As Integer = mibvals.Length
Dim cnt As Integer = 0, temp As Integer, i As Integer
Dim orgmiblen As Integer = miblen
Dim pos As Integer = 0
' Convert the string MIB into a byte array of integer values
' Unfortunately, values over 128 require multiple bytes
' which also increases the MIB length
For i = 0 To orgmiblen - 1
temp = Convert.ToInt16(mibvals(i))
If temp > 127 Then
mib(cnt) = Convert.ToByte(128 (temp 128))
mib(cnt 1) = Convert.ToByte(temp - ((temp 128) * 128))
cnt = 2
miblen = 1
Else
mib(cnt) = Convert.ToByte(temp)
cnt = 1
End If
Next
snmplen = 29 comlen miblen - 1
Если кто-нибудь поможет мне понять следующий фрагмент кода, я был бы обязан..
For i = 0 To orgmiblen - 1
temp = Convert.ToInt16(mibvals(i))
If temp > 127 Then
mib(cnt) = Convert.ToByte(128 (temp 128))
mib(cnt 1) = Convert.ToByte(temp - ((temp 128) * 128))
cnt = 2
miblen = 1
Else
mib(cnt) = Convert.ToByte(temp)
cnt = 1
End If
Ответ №1:
Он помещает значение в массив, используя вариант кодировки varint.
Используя кодировку varint, значение сохраняется по семь бит за раз, начиная с младших значащих битов, и используя восьмой бит в качестве стоп-бита, когда оставшееся значение равно нулю. Это метод, который использует BinaryWriter.Write7BitEncodedInt
метод.
Приведенный выше код обрабатывает значение, используя не более 14 бит, и сначала сохраняет наиболее значимые биты, используя восьмой бит в качестве флага продолжения вместо флага остановки.
Т.е. значение меньше 128 хранится в одном байте, в то время как значение, равное 128 или больше, хранится с наиболее значимыми семью битами первым, причем восьмой бит установлен для обозначения того, что это двухбайтовое значение, затем остальные семь бит.