转换ASCII到十六进制保持换行符

本文关键字:换行符 十六进制 ASCII 转换 | 更新日期: 2023-09-27 18:03:30

OK,所以我正在制作ASCII到HEX转换器,它工作得很好,但是当我插入换行符时,它将它们替换为这个字符-> Ú


把这个


12
3

到this

1 u2u3

命令按钮下的代码

    private void asciiToHex_Click(object sender, EventArgs e)
    {
        HexConverter HexConvert =new HexConverter();
        string sData=textBox1.Text;
        textBox2.Text = HexConvert.StringToHexadecimal(sData);
    }
    private void hexToAscii_Click(object sender, EventArgs e)
    {
        HexConverter HexConvert = new HexConverter();
        string sData = textBox1.Text;
        textBox2.Text = HexConvert.HexadecimalToString(sData);
    }

HexConverter.cs下的代码

public class HexConverter
{
    public string HexadecimalToString(string Data)
    {
        string Data1 = "";
        string sData = "";
        while (Data.Length > 0)
        //first take two hex value using substring.
        //then  convert Hex value into ascii.
        //then convert ascii value into character.
        {
            Data1 = System.Convert.ToChar(System.Convert.ToUInt32(Data.Substring(0, 2), 16)).ToString();
            sData = sData + Data1;
            Data = Data.Substring(2, Data.Length - 2);
        }
        return sData;
    }
    public string StringToHexadecimal(string Data)
    {
        //first take each charcter using substring.
        //then  convert character into ascii.
        //then convert ascii value into Hex Format
        string sValue;
        string sHex = "";
        foreach (char c in Data.ToCharArray())
        {
            sValue = String.Format("{0:X}", Convert.ToUInt32(c));
            sHex = sHex + sValue;
        }
        return sHex;
    }
}  

任何想法?

转换ASCII到十六进制保持换行符

问题是String.Format("{0:X}", Convert.ToUInt32(c))没有将其输出零填充为两位数字,因此'r'n变成了DA而不是0D0A。使用't(变为9而不是09,这也会导致后续字符的不对齐)时,您会遇到类似的问题,但更糟。

要将零填充为两位数字,可以使用X2而不是仅使用X;或者,更一般地,您可以使用Xn将零填充到n位。(请参阅MSDN上的"标准数字格式字符串"页面)

代替

System.Convert.ToUInt32(hexString),使用

uint.Parse(hexString, System.Globalization.NumberStyles.AllowHexSpecifier);

MSDN说"AllowHexSpecifier标志表示要解析的字符串总是被解释为十六进制值"

如何:在十六进制字符串和数字类型之间转换

你能做的最懒的事情就是对结果做一个string.replace("Ú","'r'n")。除非有令人信服的理由不这样做,否则我会从这里开始。

否则,在Char循环中查找NewLine字符并将其原样添加到字符串中。