2

我正在尝试将一堆无符号整数从配置文件读入一个类。这些数字可以在 base-10(例如:1234)或 base-16(例如:0xAB31)中指定。因此在 C# 2.0 中寻找strtoul等价物。

更具体地说,我对一个 C# 函数感兴趣,该函数在将指示基数或基数的参数传入为零时模仿 this 函数的行为。(在 C++ 下,strtoul将尝试根据字符串中的前几个字符“猜测”基数或基数,然后继续适当地转换数字)

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

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

4

1 回答 1

5

好吧,除非它是十六进制的,否则您不需要使用 Substring,但听起来您基本上是以正确的方式进行操作:

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

显然,这将为Substring调用创建一个额外的对象,您可以编写自己的十六进制解析代码来解决这个问题 - 但除非您确实遇到了这种方法的性能问题,否则我会保持简单。

于 2011-05-21T06:42:48.567 回答