以十六进制到字符串表示的怪异间距

本文关键字:表示 十六进制 字符串 | 更新日期: 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并将其转换。现在,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;

正如一些人在评论中提到的那样,您需要停止以这种方式使用TextBoxes。这很令人困惑。您可能需要执行以下操作:

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

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

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