代码之家  ›  专栏  ›  技术社区  ›  flavour404

将字符串转换为uint

  •  4
  • flavour404  · 技术社区  · 14 年前

    我试图从文本框中读取十六进制值,然后将其放入uint中,这是代码:

    UInt32 x = Convert.ToUInt32(location_txtbox.ToString());
    

    为什么,我想把x传递给一些非托管代码,而函数头需要一个DWORD。

    我得到一个'输入字符串格式错误不正确?我正试图输入0x7c或0x777之类的值,但我还是不断地得到错误?

    谢谢。

    4 回复  |  直到 14 年前
        1
  •  14
  •   Preet Sangha    14 年前

    用这个 overload of Convert.ToUInt32 指定转换基的位置。它应该使用或不使用前导“0x”。

    UInt32 x = Convert.ToUInt32(location_txtbox.Text, 16);
    
        2
  •  3
  •   Andy Lowry    14 年前

    假设location_txtbox是一个文本框,则可能需要使用.Text而不是.ToString()。

    我认为需要传递16作为解析hex的第二个参数:例如Convert.UInt32(X,16)

    见: http://msdn.microsoft.com/en-us/library/swz6z5ks.aspx

        3
  •  2
  •   R. Martinho Fernandes    14 年前

    Convert.ToUInt32 只是打电话 UInt32.Parse(String) . 如果你打电话给 overload 这需要一个 NumberStyles 参数,可以指定值为十六进制。问题是,你必须去掉前面的“0x”,因为这是不允许的。

    var hexNumber = "0x777".Substring(2);
    uint.Parse(hexNumber, System.Globalization.NumberStyles.HexNumber)
    
        4
  •  2
  •   ernestpazera    14 年前

    A) 如果不将Convert包装在try/catch中,或者除非您非常确定要解析的内容将被成功解析,否则不要使用Convert。

    B) 使用胰蛋白酶。特别是,使用允许您指定数字样式的。参考资料在 http://msdn.microsoft.com/en-us/library/kadka85s.aspx

    C) 在样式中,似乎需要NumberStyles.HexSpecifier

    D) 使用文本属性,如上所述。