2011-05-21 183 views
2

我试图从一个配置文件读入一串无符号整数到一个类中。这些数字可以在base-10(例如:1234)或base-16(例如:0xAB31)中指定。因此在C#2.0中寻找等效的strtoulstrtoul相当于C#

更具体地说,我感兴趣的是一个C#函数,它在模拟此函数的行为时,指示基数或基数的参数被传入为零。 (在C++中,strtoul会尝试基于字符串中的第一对字符猜出基数或基数,然后继续转换数字)

当前我手动检查前两个字符(使用string.Substring()方法),然后根据需要调用Convert.ToUInt32(hex, 10)Convert.ToUInt32(hex, 16)

我确信必须有更好的方法来处理这个问题,因此这篇文章。更优雅的想法/解决方案或解决方案将是很大的帮助。

回答

5

好了,你不需要使用子串,除非它在十六进制,但它听起来像你基本上是做正确的方式:

return text.StartsWith("0x") ? Convert.ToUInt32(text.Substring(2), 16) 
          : Convert.ToUInt32(text, 10); 

显然,这将创建Substring一个额外的对象电话,而你可能会编写你自己的十六进制解析代码来应对这种情况 - 但除非你已经遇到这种方法的性能问题,我会保持简单。

+0

感谢您使用更简洁的语法。我没有想到使用'StartsWith()'。我正在阅读大约50个值,所以轻微的表现没问题。此外,这是否意味着没有库函数来执行此操作? (在C#中定制/​​自己实现'strtoul'看起来对于这个小问题的矫枉过正恕我直言) – 2011-05-21 07:05:40

+0

@Bhargav:这意味着我不知道*库函数做这个:) – 2011-05-21 07:10:00