当前位置:  开发笔记 > 编程语言 > 正文

如何将十六进制值解析为uint?

如何解决《如何将十六进制值解析为uint?》经验,为你挑选了3个好方法。

尝试

Convert.ToUInt32(hex, 16)  //Using ToUInt32 not ToUInt64, as per OP comment

要注意的事情(虽然它可能不适用于这个特定的整数转换)...如果输入不好,Convert.ToUInt32可能比UInt32.TryParse慢几个数量级,比如Convert.ToDouble vs Double.TryParse:http ://stackoverflow.com/questions/586436/double-tryparse-or-double-convert-what-is-faster-and-more-safe/586539#586539此外,它并不总是很清楚它的转换:http:// stackoverflow.com/questions/586436/double-tryparse-or-double-convert-what-is-faster-and-more-safe/586460#586460 (5认同)


Jeremy Wiebe.. 45

您可以使用重载TryParse(),它将NumberStyle参数添加到TryParse调用中,该调用提供十六进制值的解析.使用NumberStyles.HexNumber它允许您将字符串作为十六进制数传递.

:该问题NumberStyles.HexNumber是,它支持带有前缀解析值(即0x,&H或者#,所以你必须试图解析值之前剥离其关闭).

基本上你这样做:

uint color;
var hex = TextBox1.Text;

if (hex.StartsWith("0x", StringComparison.CurrentCultureIgnoreCase) ||
    hex.StartsWith("&H", StringComparison.CurrentCultureIgnoreCase)) 
{
    hex = hex.Substring(2);
}

bool parsedSuccessfully = uint.TryParse(hex, 
        NumberStyles.HexNumber, 
        CultureInfo.CurrentCulture, 
        out color);

有关如何使用NumberStyles枚举的示例,请参阅此文章:http://msdn.microsoft.com/en-us/library/zf50za27.aspx



1> Nescio..:

尝试

Convert.ToUInt32(hex, 16)  //Using ToUInt32 not ToUInt64, as per OP comment


要注意的事情(虽然它可能不适用于这个特定的整数转换)...如果输入不好,Convert.ToUInt32可能比UInt32.TryParse慢几个数量级,比如Convert.ToDouble vs Double.TryParse:http ://stackoverflow.com/questions/586436/double-tryparse-or-double-convert-what-is-faster-and-more-safe/586539#586539此外,它并不总是很清楚它的转换:http:// stackoverflow.com/questions/586436/double-tryparse-or-double-convert-what-is-faster-and-more-safe/586460#586460

2> Jeremy Wiebe..:

您可以使用重载TryParse(),它将NumberStyle参数添加到TryParse调用中,该调用提供十六进制值的解析.使用NumberStyles.HexNumber它允许您将字符串作为十六进制数传递.

:该问题NumberStyles.HexNumber是,它支持带有前缀解析值(即0x,&H或者#,所以你必须试图解析值之前剥离其关闭).

基本上你这样做:

uint color;
var hex = TextBox1.Text;

if (hex.StartsWith("0x", StringComparison.CurrentCultureIgnoreCase) ||
    hex.StartsWith("&H", StringComparison.CurrentCultureIgnoreCase)) 
{
    hex = hex.Substring(2);
}

bool parsedSuccessfully = uint.TryParse(hex, 
        NumberStyles.HexNumber, 
        CultureInfo.CurrentCulture, 
        out color);

有关如何使用NumberStyles枚举的示例,请参阅此文章:http://msdn.microsoft.com/en-us/library/zf50za27.aspx


就个人而言,我将此行为称为错误.为什么他们会调用标志**允许**HexSpecifier如果它实际上不允许任何十六进制说明符?
你是对的!要解析像"0x80C1"这样的十六进制数,你必须剥离"0x"部分.我已适当更新了我的代码示例.谢谢.

3> Corey Ross..:

或者喜欢

string hexNum = "0xFFFF";
string hexNumWithoutPrefix = hexNum.Substring(2);

uint i;
bool success = uint.TryParse(hexNumWithoutPrefix, System.Globalization.NumberStyles.HexNumber, null, out i);

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有