2017-02-27 15 views
0

私はInt32に変換してテキストボックスに表示する4バイトの値を持っています。そこに問題はありません。問題は、0で文字列を埋めてみるときに発生します。 10進数を表示するときは常に8文字を含める必要があります。したがって、それより小さい場合は0を埋めたいと思います。ここで C#forループが正しく反復しない

string parmDecString = BitConverter.ToInt32(testNum, 0).ToString(); 
Console.WriteLine("length: {0} - {1}", parmDecString.Length, (8 - parmDecString.Length)); 
for (int l=0; l < (8-parmDecString.Length); l++) 
{ 
    parmDecString = "0" + parmDecString; 
} 
textBox74.Text = parmDecString; 

が、私は異なる「parmDecStringの価値観に基づいて取得するテキストボックスに出力です:すべてのループで

parmDecString = "123" 
Console: length: 3 - 5 
textbox: 00<=== only 3 times in the 'for' loop, expected 5x 

parmDecString = "12345" 
Console: length: 5 - 3 
textbox: 0<=== only 2 times in the 'for' loop, expected 3x 

parmDecString = "12345678" 
Console: length: 8 - 0 
textbox: 12345678 <=== as expected 
+4

'parmDecString.Length'が変化しています。 – SLaks

+0

私はSLaksに同意します –

+0

または、ちょうどPadLeftを使用してください。https://msdn.microsoft.com/en-us/library/92h5dc07(v=vs.110).aspx – hatchet

答えて

2

parmDecString.Lengthが増加し、反復

を開始する前に、変数に代入してみてください
6

まず、の右の回答はprovided format stringsです。あなたのケースでは、番号をparamDecとして保存した場合、8桁の整数文字列表現にはparamDec.ToString("D8");を使用します。

あなたforループが動作していない理由は、あなたが8 - paramDecString.Lengthに到達するまで、あなたが反復されていますが、0を追加するように、その長さを変え続けていることです。値を最初に保存しておくとうまくいくでしょう:

int numZeroes = (8-parmDecString.Length); 
for (int l=0; l < numZeroes; l++) 
{ 
    parmDecString = "0" + parmDecString; 
} 

また、そのような文字列は高価です。代わりにStringBuilderを使用することを検討してください。追加するたびに新しい文字列が作成されるわけではありません。文字列の長さを変更すると、あなたのループに影響することはありません道

int limit = 8-parmDecString.Length; 
for (int l=0; l < (OriginalLength); l++) 

:と

for (int l=0; l < (8-parmDecString.Length); l++) 

+0

ありがとうございます。私はC#の初心者ですから、8桁の整数文字列表現を使用することもできませんでした。私はそれを使用するようにコードを変更し、期待通りに動作させました。これは大いに感謝しています...私はこれを保存して、次回同じ愚かな間違いをしないでください。 – milnuts

2

は、だから、ループ内からループの境界を変更することによって、あなたのループを台無しに...しかし、実際にループが最初の場所で必要ではなかった。

"123".PadLeft(8,'0') //ftw 
関連する問題