2012-02-23 297 views
-1

我使用C#的SNMP庫,它沒有一個很好的文檔。 當我請求一個日期時,它返回一個OctetString,我不知道該如何處理它。如何將OctetString轉換爲可讀的字符串(C#)?

當我將其轉換爲字符串之成爲這樣: 07 DC 02 17 0F 14 0E 00 2D 02 00

+1

您應該提及您正在使用的SNMP庫... – ken2k 2012-02-23 19:47:19

+0

您正在使用的是什麼庫?漂亮的特定格式 – sll 2012-02-23 19:47:38

+0

我認爲你需要先把它變成一個DateTime。 – 2012-02-23 19:48:12

回答

4

只是一個猜測

var b= "07 DC 02 17 0F 14 0E 00 2D 02 00" 
     .Split(' ') 
     .Select(s => byte.Parse(s, NumberStyles.HexNumber)) 
     .ToArray(); 

int year =b[0]*256 + b[1]; 
int month = b[2]; 
int day = b[3]; 
int hour = b[4]; 
int min = b[5]; 
int sec = b[6]; 

DateTime dt = new DateTime(year, month, day, hour, min, sec); 

OUTPUT: 2012年2月23日下午三時二十分14秒


編輯

現在是不是任何猜測更多。 這裏是問題


EDIT-2

var strdateTime = 
    String.Format("{0}/{1,2:00}/{2,2:00} {3,2:00}:{4,2:00}:{5,2:00}.{6,2:00} {7}{8,2:00}:{9,2:00} UTC", 
      year,month,day,hour,min,sec, 
      b[7],Convert.ToChar(b[8]),b[9],b[10]); 

OUTPUTSNMPv2-TC DateAndTime格式:2012年2月23日15:20:14.00 -02:00 UTC

+0

是的,看起來像一個很好的猜測。但它留下了幾個字節不明(毫秒?) – 2012-02-23 21:32:24

+0

@HenkHolterman,也許但很難猜到。 '00 2D 02 00' – 2012-02-23 21:35:31

0

OctetString.ToString Method文檔:該OctetStrig對象的

返回字符串表示。如果在對象中發現了 不可打印的字符,則輸出是字符串的十六進制表示形式 。 (Overrides Object.ToString()。)

請確保沒有不可打印的字符。

更新

有關實現的更多詳細信息:OctetString.ToString() method

+0

不幸的是,該示例包含了很多非打印。 – 2012-02-23 19:52:34

+1

@HenkHolterman是的,因爲它應該是一個編碼的時間戳,而不是一個字符串。他做錯了一些事情,並沒有給我們提供足夠的信息來幫助他們 – 2012-02-23 19:55:17

相關問題