2017-02-27 195 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