文字列から数値(int32)への変換について
Hamu  2022/01/16(Sun) 21:20
以下のようなコードを記述すると、str="08"または"09"のときのみ変換できずエラーメッセージを吐きます。
それ以外の数値は問題なく変換(U"07" なら 「7」U"12" なら 「12」等)され、出力されます。
サンプルコードのwhile (System::Update())内に記述しても同様の状況となります。

String str = (U"09");
Print << Parse<int32>(str);
記事編集
Reputeless  2022/01/17(Mon) 15:12
Siv3D は C/C++ のパース規則と同様に、0 から始まる数はデフォルトで 8 進数と見なします。
したがって 8 や 9 が登場するとエラーになります。

0 から始まる数のパースをやめるか、次のように明示的に基数を指定すると良いです。

# include <Siv3D.hpp> // OpenSiv3D v0.6.3

void Main()
{
Print << ParseInt<int32>(U"08", Arg::radix = 10); // 10 進数としてパース
Print << ParseInt<int32>(U"080", Arg::radix = 10); // 10 進数としてパース

Print << Parse<int32>(U"010"); // 8 進数としてパース
Print << Parse<int32>(U"017"); // 8 進数としてパース

while (System::Update())
{

}
}
編集
件名
Re: 文字列から数値(int32)への変換について
名前
コメント
画像添付


投稿修正キー (投稿を修正する時に使います)
画像認証 (右画像の数字を入力) 投稿キー

- WEB PATIO -