0

我收到一个错误,看起来是由于在 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 服务的早期版本,但它不适用于我正在处理的当前版本。

有没有人经历过这个?

4

2 回答 2

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);
}
于 2012-10-05T00:51:50.447 回答
0

这是一个非常有趣的错误,因为 Parse 方法似乎UInt32只能[ws][sign]digits[ws]根据文档解析表单的数字。该方法的一个版本可以使用NumberStyles标志,请参阅文档。其中一个值是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正确解析。

于 2012-10-05T01:03:02.123 回答