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;
}
}
任何想法?
问题是String.Format("{0:X}", Convert.ToUInt32(c))
没有将其输出零填充为两位数字,因此rn
变成了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("Ú","rn")
。除非有令人信服的理由不这样做,否则我会从这里开始。
否则,在Char循环中查找NewLine字符并将其原样添加到字符串中。