以十六进制到字符串表示的怪异间距
本文关键字:表示 十六进制 字符串 | 更新日期: 2023-09-27 18:23:37
我正在尝试制作一个十六进制到字符串的转换器,由于某种原因,转换中的字节间距乘以2。
我希望它在字符之间留出一个空格,
private void button2_Click(object sender, EventArgs e)
{
try
{
textBox1.Clear();
textBox2.Text = textBox2.Text.Replace(" ", "");
string StrValue = "";
while (textBox2.Text.Length > 0)
{
StrValue += System.Convert.ToChar(System.Convert.ToUInt32(textBox2.Text.Substring(0, 2), 16)).ToString();
textBox2.Text = textBox2.Text.Substring(2, textBox2.Text.Length - 2);
textBox1.Text = textBox1.Text + StrValue + " ";
}
}
catch (Exception ex)
{
MessageBox.Show("Conversion Error Occurred : " + ex.Message, "Conversion Error");
}
}
所以转换后的"41 41"看起来像"A A",但情况是这样的:形象有人看到我做错了什么吗?
在行中
textBox1.Text = textBox1.Text + StrValue + " ";
因此,您将计算结果附加到CCD_ 1中。
因此,在第一次迭代后,结果是A
,您可以将其和空白添加到TextBox1
。然后,取第二个41
并将其转换。现在,StrValue
是AA
,并将其和空格附加到TextBox1
,依此类推
您需要将这条线从while
循环中移出:
textBox1.Clear();
textBox2.Text = textBox2.Text.Replace(" ", "");
string StrValue = "";
while (textBox2.Text.Length > 0)
{
StrValue += System.Convert.ToChar(System.Convert.ToUInt32(textBox2.Text.Substring(0, 2), 16)).ToString();
textBox2.Text = textBox2.Text.Substring(2, textBox2.Text.Length - 2);
}
textBox1.Text = StrValue;
正如一些人在评论中提到的那样,您需要停止以这种方式使用TextBox
es。这很令人困惑。您可能需要执行以下操作:
private string HexToString(string hex)
{
string result = "";
while (hex.Length > 0)
{
result += Convert.ToChar(Convert.ToUInt32(hex.Substring(0, 2), 16));
hex = hex.Substring(2); // no need to specify the end
}
return result;
}
然后,在您的按钮点击事件或其他任何地方:
textBox1.Text = HexToString(textBox2.Text.Replace(" ", ""));
就这么简单。或者,您甚至可以移动以替换方法中的空白。现在,这些代码是可读的,并且在逻辑上是分离的。
问题似乎是由TextBox1
0中的累积值引起的。您应该在while中定义该变量,并只分配它(不要附加新值)。
while (textBox2.Text.Length > 0)
{
string StrValue = System.Convert.ToChar(System.Convert.ToUInt32(textBox2.Text.Substring(0, 2), 16)).ToString();
textBox2.Text = textBox2.Text.Substring(2, textBox2.Text.Length - 2);
textBox1.Text = textBox1.Text + StrValue + " ";
}