我是獲取的Octet String用String輸出,輸出的是一連串的2個16進制數 空格。;然后想對輸出結果操作,得到我想要的值。
解決方案:private static string exchange(string input) { int number = (input.Length 1) / 3; string strReturn = ""; string[] strArray = input.Split(' '); byte[] byteArray = new byte[2]; byte[] retByte = new byte[strArray.Length]; int intTemp; string c; for (int i = 0; i < strArray.Length; i ) { intTemp = Convert.ToInt32(strArray[i], 16); if (intTemp > 122) { byteArray = new byte[2] { (byte) intTemp, (byte) Convert.ToInt32(strArray[i 1], 16) }; c = System.Text.Encoding.Default.GetString(byteArray); i ; } else c = Convert.ToChar(intTemp).ToString(); strReturn = strReturn c; } return strReturn; }
octet string是字節串,即用十六進制串表示字節序列。如真正的字節序列是 1 2 3 4,用字節串則表示為31 32 33 34,具體的轉換方法為:
1、先看字節串有多長,因為一個字節要用到三個字符(兩位數符加一個空格,如果有空格的話),然后將之除以3,得到字節的數目,然后由此申請空間,用GetMem或動態數組 SetLength均可;
2、取出每兩個字符,用HexToBin轉換為一個字節放到結果中;
3、跳過空格;
4、重復2、3直至串結束。
注意,看看你的實際的octet string中有沒有空格,如果沒有,則上面做相應調整。
0xFF:FD:FF:0F:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
這個數據是用工具取出來的?
如果是mib leaf的類型是PortList,那么根據PortList的定義,端口1~14,16~24,29~32在這個Vlan下。
字節順序是指占內存多於一個字節類型的數據在內存中的存放順序,有小端、大端兩種字節順序。小端字節序指低字節數據存放在內存低地址處,高字節數據存放在內存高地址處;大端字節序是高字節數據存放在低地址處,低字節數據存放在高地址處。不同的CPU有不同的字節序類型,基於X86平台的PC機是小端字節序的;而網絡字節序就是大端字節序。
Byte[]轉十六進制
// 字節轉十六進制
private static char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
internal static string ToHexString(byte[] bytes)
{
char[] chars = new char[bytes.Length * 2];
for (int i = 0; i < bytes.Length; i++)
{
int b = bytes[i];
chars[i * 2] = hexDigits[b >> 4];
chars[i * 2 + 1] = hexDigits[b & 0xF];
}
return new string(chars);
}
分類
---------------------
作者:fs20041242
來源:CSDN
原文:https://blog.csdn.net/fs20041242/article/details/83841998
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
SMI信息管理結構中定義了12種數據類型,一般MIB中常見的有INTERGER、DisplayString、OCTET STRING、OBJECT IDENTIFIER等幾種。其中OCTET STRING為0或多個8 bit字節,每個字節值在0~255之間;DisplayString為0或多個8bit字節,但是每個字節必須是ASCII碼,在MIB-II中,所有該類型的變量不能超過255個字符(0個字符是可以的)。
除了字符范圍不一樣之外,DisplayString和OCTET STRING這兩種類型並沒有什么差別,在net-snmp中,它們都是用的ASN_OCTET_STR類型返回。但是在值的顯示上,它們是有區別的。前者按一般的字符串形式顯示,如commonNEVendorInfo.0:-->Linux。后者按照十六進制字節流顯示(每個字節間以空格分隔),如commonPhysAddress.0:-->00 23 b8 00 00 7b。
我們先看一下trap的格式(man snmptrap):
本文關注的是“[OID TYPE VALUE]...”的變量綁定部分,TYPE的定義如下:
一般trap中綁定的變量都是int或string類型,發送綁定這兩種類型的變量的trap如下:
snmptrap -v 1 -c public 192.168.42.115 .1.3.6.1.4.1.17409.1.6 192.168.42.145 6 1 12345 OID i 12 OID s hello;
OCTET STRING類型的OID的值處理要特殊一點,要先將字符串格式化為16進制的字節流,偽代碼如下:
char oct_str[SIZE];
char str[] = "hello";
snprintf(oct_str, SIZE, "%02x%02x....", str[0], str[1],...);
作者:wuchuan53
來源:CSDN
原文:https://blog.csdn.net/wuchuanlove53/article/details/18214713
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!