2017-04-12 51 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);