問題
オンラインゲームの実装時、相手側に整数値を送信しようと思い、文字列に格納してからメッセージを送信するために以下のコードを書いたが、整数値の最後の一桁が抜け落ちてしまう(特に、負の数の場合)。
以下に疑似コードを示します。(本当はもっと複雑で、いろんな整数値を一つの文字列にまとめて格納していました。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)); }   | 
					
  
  
  
  
コメント