Web服务表单调用的十六进制转换错误

时间:2012-10-05 00:45:32

标签: c# asp.net service web hex

我收到一个错误,看起来是由于在uint字段中使用十六进制输入的错误。它出现在我正在处理的两个版本的Web服务上。

System.ArgumentException: Cannot convert 0x2 to System.UInt32.
Parameter name: type ---> System.FormatException: Input string was not in a correct format.

然而,我的同事说,当我使用C ++调用它时,它对我以前版本的Web服务起作用,但它对我正在处理的当前版本不起作用。

有没有人经历过这个?

2 个答案:

答案 0 :(得分:1)

你在代码中使用这样的东西吗?如果没有,请尝试实现此操作(将“CF01”替换为您的输入值):

int i = Convert.ToInt32("CF01", 16);

编辑:

对于带有0x前缀的特定情况:

public int32 GetInt32FromHex(string h) {
    h = h.substring(2, (h.length - 2));
    return convert.ToInt32(h, 16);
}

答案 1 :(得分:0)

这是一个非常有趣的错误,因为UInt32的Parse方法似乎只能解析documentation[ws][sign]digits[ws]形式的数字。该方法的一个版本可以使用NumberStyles标记查看documentation。其中一个值是AllowHexSpecifier,你认为它会允许0x。但是,如果您阅读Parse方法和NumberStyles无法处理0x格式的文档。如果你看它说:

  

如果s是十六进制数字的字符串表示形式,则不能在任何装饰(例如0x或& h)之前将其区分为十六进制数字。这会导致转换失败。

AllowHexSpecifier使其仅包含[ws]hexdigits[ws]

形式的数字

在解析或使用其他解析方法之前,您似乎必须摆脱前导0x。

一种方法,特别是如果存在前导0x,则执行以下操作:

var value = UInt32.Parse( "0x2".TrimStart('0').TrimStart('x'));

这里你必须要小心检查以确保你有正确的基础,你可能需要使用NumberStyles.AllowHexSpecifier来正确解析。