ちょっとメモメモ。
C言語だと、"sscanf(inbuf, "%i", &val);"とするんですが、.NETとPythonで、10/16進数を一緒に解釈する方法って何じゃらほい?と思ったので。
$ ipy.exe -X:ColorfulConsole -X:AutoIndent -X:TabCompletion IronPython 1.0 (1.0.61005.1977) on .NET 2.0.50727.42 Copyright (c) Microsoft Corporation. All rights reserved. >>> import clr >>> import System >>> help(System.Convert.ToInt32) Help on built-in function ToInt32 | ToInt32(...) | int ToInt32(str value, int fromBase) | int ToInt32(object value) | int ToInt32(object value, IFormatProvider provider) | int ToInt32(bool value) | int ToInt32(Char value) | int ToInt32(SByte value) | int ToInt32(Byte value) | int ToInt32(Int16 value) | int ToInt32(UInt16 value) | int ToInt32(UInt32 value) | int ToInt32(int value) | int ToInt32(Int64 value) | int ToInt32(UInt64 value) | int ToInt32(Single value) | int ToInt32(float value) | int ToInt32(decimal value) | int ToInt32(str value) | int ToInt32(str value, IFormatProvider provider) | int ToInt32(DateTime value) >>> System.Convert.ToInt32("10") 10 >>> System.Convert.ToInt32("0x10") Traceback (most recent call last): File , line 0, in <stdin>##26 File , line 0, in ToInt32##25 File mscorlib, line unknown, in ParseInt32 File mscorlib, line unknown, in StringToNumber SystemError: 入力文字列の形式が正しくありません。 >>> eval("10") 10 >>> eval("0x10") 16 >>> int("10") 10 >>> int("0x10") Traceback (most recent call last): File , line 0, in <stdin>##33 ValueError: invalid integer number literal
pythonだと、evalを使えば、10/16進数の自動判定を行ってくれるので便利です。
.NETだと、標準で行ってくれないっぽいみたいですね。(IFormatProviderのカスタム実装が要るんでしょうねぇ)