問題
オンラインゲームの実装時、相手側に整数値を送信しようと思い、文字列に格納してからメッセージを送信するために以下のコードを書いたが、整数値の最後の一桁が抜け落ちてしまう(特に、負の数の場合)。
以下に疑似コードを示します。(本当はもっと複雑で、いろんな整数値を一つの文字列にまとめて格納していました。Substring を用いているのはそのため。)
1 2 3 4 5 6 7 |
public string PackIntegerIntoString(int number) { return number.ToString("D11"); } public int UnpackIntegerFromString(string data) { return int.Parse(data.Substring(0, 11)); } |
解決策
フォーマットの仕様による。”D11″ と指定した場合11桁の文字列に格納するが、この桁に “-” は含まれず、文字列の長さとしては 12 となる。
コード(修正後)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public string PackIntegerIntoString(int number) { if (number < 0) { return "-" + (-number).ToString("D11"); } else { return number.ToString("D12"); } } public int UnpackIntegerFromString(string data) { return int.Parse(data.Substring(0, 12)); } |
コメント