我在Ruby中有这段代码:
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 + ")";
答案 0 :(得分:1)
因为你的问题只是将你的字符串转换为int - 我将解决这个问题。数字0xf9f1e687
超出了C#Int32
的范围。 Int32.MaxValue
是0x7FFFFFFF
。这就是您的转换产生错误(负)值的原因。如果它只是抛出异常会更好,但事实并非如此。要解决此问题,请使用long
(Int64
)或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);