【问题标题】:strtoul Equivalent in C#strtoul 等价于 C#
【发布时间】:2011-05-21 06:31:59
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# data-conversion


    【解决方案1】:

    嗯,你不需要使用 Substring,除非它是十六进制的,但听起来你基本上是用正确的方式做的:

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

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

    【讨论】:

    • 感谢更简洁的语法。我没有想到使用StartsWith()。我正在阅读大约 50 个值,因此轻微的性能影响是可以的。另外,这是否意味着没有库函数可以做到这一点? (对于这个小问题恕我直言,C# 中 strtoul 的自定义/自己的实现看起来有点矫枉过正)
    • @Bhargav:这意味着我知道库函数可以做到这一点:)
    猜你喜欢
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    相关资源
    最近更新 更多