0

uintフィールドで16進入力を使用したエラーが原因のように見えるエラーを受け取りました。これは、私が取り組んでいる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フォームの番号しか解析できないように見えるため、これは非常に興味深いエラーです。フラグを取ることができるメソッドのバージョンがあります。ドキュメントを参照してください。これの値の1つは、0xを許可すると思われる値です。ただし、ParseメソッドとNumberStylesの両方のドキュメントを読んだ場合、0x形式をまったく処理できません。あなたがそれを見ればそれは言う:[ws][sign]digits[ws]NumberStylesAllowHexSpecifier

sが16進数の文字列表現である場合、16進数として区別する装飾(0xや&hなど)を前に付けることはできません。これにより、変換が失敗します。

AllowHexSpecifierは、フォームの数値のみが表示されるようにします[ws]hexdigits[ws]

解析する前に先頭の0xを削除するか、別の解析方法を使用する必要があるようです。

これを行う1つの方法は、特に先頭に0xがある場合、次のことを行うことです。

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

ただし、ここでチェックを行って適切なベースがあることを確認する必要があります。また、を使用しNumberStyles.AllowHexSpecifierて正しく解析する必要がある場合があります。

于 2012-10-05T01:03:02.123 に答える