Hex到String中的奇怪间距

时间:2015-11-20 03:42:00

标签: c# .net

我正在尝试创建一个十六进制到字符串转换器,并且由于某种原因,转换中字节之间的间距乘以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",但这是发生的事情: image 有人看到我做错了吗?

2 个答案:

答案 0 :(得分:1)

在这一行

textBox1.Text = textBox1.Text + StrValue + " ";

您因此将计算结果附加到TextBox1

因此,在第一次迭代后,结果为A,您将它和空格追加到TextBox1。 然后,你拿第二个41并转换它。现在,StrValueAA,您将其和空格追加到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这种方式。这很令人困惑。您可能希望执行以下操作:

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(" ", "")); 

就这么简单。或者你甚至可以移动替换方法中的空格。现在,这段代码是可读的,并且在逻辑上是分开的。

答案 1 :(得分:0)

问题似乎是由StrValue中的累计值引起的。您应该在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 + " ";
}