C#For循环没有正确迭代

mil*_*uts 0 c# for-loop

我有一个4字节的值,我转换为Int32,然后在文本框中显示它.没有问题.当我尝试用0填充字符串时出现问题.当我显示十进制数时,它应该总是包含8个字符,所以如果它小于我想要用0填充它.

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;
Run Code Online (Sandbox Code Playgroud)

这是我根据不同的'parmDecString'值得到的文本框中的输出:

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

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

parmDecString = "12345678"
Console:  length: 8 - 0
textbox:  12345678   <=== as expected
Run Code Online (Sandbox Code Playgroud)

Bra*_*NET 6

首先,对此的正确答案就是使用提供的格式字符串.在您的情况下,如果您存储的数字paramDecparamDec.ToString("D8");用于8位整数字符串表示.

你的for循环不起作用的原因是你正在迭代直到你到达8 - paramDecString.Length但是当你追加0时这个长度不断变化.如果您首先存储值,它将起作用:

int numZeroes = (8-parmDecString.Length); 
for (int l=0; l < numZeroes; l++)
{
    parmDecString = "0" + parmDecString;
}
Run Code Online (Sandbox Code Playgroud)

此外,像这样的字符串附加是昂贵的.请考虑使用,StringBuilder因为每次附加时都不会创建新字符串.