2017-02-27 168 views
0

我有一個4字節的值,我將其轉換爲Int32,然後將其顯示在文本框中。那裏沒有問題。當我嘗試用0填充字符串時,問題就出現了。當我顯示小數時,它應該總是包含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,你可以使用paramDec.ToString("D8");作爲8位整型字符串表示。

for循環不工作的原因是你迭代,直到你達到8 - paramDecString.Length但長度不斷變化你追加0。如果您首先保存該值,它會起作用:

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

此外,字符串追加像這樣昂貴。考慮使用StringBuilder來代替,因爲每次附加到它時都不會創建新的字符串。

+0

謝謝。我是C#的新手,所以我不知道我甚至可以使用8位整數字符串表示形式。我改變了代碼來使用它,並且完全按照預期工作。這是非常感謝...我將這個存儲,所以我不下次犯同樣的愚蠢的錯誤。 – milnuts

0

變化:

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

有:串

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

這樣變化的長度也不會影響你的循環。

2

所以你從內環路改變環路的邊界搞砸了你的循環......但真正的循環中的第一個地方是沒有必要的:

"123".PadLeft(8,'0') //ftw