Как вы интерпретируете hrPrinterDetectedErrorState (http://cric.grenoble.cnrs.fr/Administrateurs/Outils/MIBS/?oid=1.3.6.1.2.1.25.3.5.1.2) или что-то подобное с использованием Sharp Snmp lib? Есть ли какой-то тип битовой строки? Это своего рода битовая маска, но вы можете получить только один байт вместо двух (или я видел четыре байта).
Как вы интерпретируете битовую строку, используя Sharp snmp lib (hrPrinterDetectedErrorState)?
comment
Невозможно. Для интерпретации BITS документы MIB обязательны, и только #SNMP Pro имеет такую поддержку.
- person Lex Li   schedule 02.03.2018
comment
Спасибо за ответ. Есть ли какой-то общий метод #snmp, который преобразует многобайтовую строку октетов в биты (или целое число)?
- person js2010   schedule 02.03.2018
comment
GetRaw() возвращает массив байтов. Я имел в виду одно целое число.
- person js2010   schedule 02.03.2018
comment
байты еще проще для битовых операций.
- person Lex Li   schedule 02.03.2018
comment
В случае hrPrinterDetectedErrorState мне пришлось бы иметь 2 перечисления [flags] вместо одного, потому что нужно проверить 15 бит.
- person js2010   schedule 02.03.2018
Ответы (1)
Сделал сам в powershell.
[flags()] Enum hrPrinterDetectedErrorState
{
lowPaper = 0x8000
noPaper = 0x4000
lowToner = 0x2000
noToner = 0x1000
doorOpen = 0x0800
jammed = 0x0400
Offline = 0x0200
serviceRequested = 0x0100
inputTrayMissing = 0x0080
outputTrayMissing = 0x0040
markerSupplyMissing = 0x0020
outputNearFull = 0x0010
outputFull = 0x0008
inputTrayEmpty = 0x0004
overduePreventMaint = 0x0002
notUsed = 0x0001
}
function snmpmessage($data) {
$bytes = [byte[]][char[]]$data
# pack up to two bytes into an int left to right
$code = [int]$bytes[0]
$code = $code -shl 8
if ($bytes[1]) { $code = $code + $bytes[1] }
[hrPrinterDetectedErrorState]$code
}
PS C:\> snmpmessage -join [char[]](0x91,0x04)
inputTrayEmpty, serviceRequested, noToner, lowPaper
person
js2010
schedule
28.03.2019