2017-04-12 47 views
0

我有這樣一段代碼在Ruby中:如何將這段紅寶石代碼轉換爲c#?

server_id = "0xf9f1e687" 

actions = "S(#{Time.now.to_f * 1000).to_i.to_s})S(12946;server:#{server_id.to_i(16).to_s})" 

我怎樣寫在C#中?

最近我得到的是:

int server_id = (int)new System.ComponentModel.Int32Converter() 
       .ConvertFromString("0xf9f1e687"); 

var actions = "S(" + DateTime.Now.Second + ")S(12946;server:" + server_id + ")"; 
+1

所以你在C#寫的。它是否按預期工作或沒有? – Evk

+0

不,從字符串到Int的轉換失敗。 –

回答

1

由於您的問題只與轉換您的字符串爲int - 我將討論這一點。數字0xf9f1e687超出了C#Int32的範圍。 Int32.MaxValue0x7FFFFFFF。這就是爲什麼你的轉換給出了錯誤的(負面)價值。如果它拋出一個異常,它會更好,但事實並非如此。要修復,使用longInt64)或unsigned int類型(UInt32):

var server_id = (uint) new UInt32Converter() 
    .ConvertFromString("0xf9f1e687"); 
var server_id = (long) new Int64Converter() 
      .ConvertFromString("0xf9f1e687"); 

替代方式:

var server_id = uint.Parse("0xf9f1e687".Replace("0x", ""), NumberStyles.AllowHexSpecifier);