我有一个4字节的值,我将其转换为Int32,然后将其显示在文本框中。没有问题。当我尝试用0填充字符串时出现问题。当我显示十进制数时,它应该总是包含8个字符,所以如果它小于我想要用0' s填充它。
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;
这是我根据不同的&#39; parmDecString&#39;得到的文本框中的输出。值:
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
答案 0 :(得分: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
,因为每次附加时都不会创建新字符串。
答案 1 :(得分:2)
parmDecString.Length在每个循环中增加,尝试在开始迭代之前将其分配给变量
答案 2 :(得分:2)
所以你通过在循环中改变循环的界限搞砸了你的循环......但是首先真的不需要循环:
"123".PadLeft(8,'0') //ftw
答案 3 :(得分:0)
更改:
for (int l=0; l < (8-parmDecString.Length); l++)
with:
int limit = 8-parmDecString.Length;
for (int l=0; l < (OriginalLength); l++)
这样改变字符串的长度不会影响你的循环。