C#hex到ascii
我正在尝试将hex的字符串转换为ASCII,使用:
public void ConvertHex(String hexString) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < hexString.Length; i += 2) { String hs = hexString.Substring(i, i + 2); System.Convert.ToChar(System.Convert.ToUInt32(hexString.Substring(0, 2), 16)).ToString(); } String ascii = sb.ToString(); MessageBox.Show(ascii); }
但我得到一个out或boundsexception,我确定它是一个明显的错误,但我尝试过的其他代码也不起作用。 我究竟做错了什么?
此代码将hex字符串转换为ASCII,您可以将其复制粘贴到一个类中,并在不进行实例化的情况下使用它
public static string ConvertHex(String hexString) { try { string ascii = string.Empty; for (int i = 0; i < hexString.Length; i += 2) { String hs = string.Empty; hs = hexString.Substring(i,2); uint decval = System.Convert.ToUInt32(hs, 16); char character = System.Convert.ToChar(decval); ascii += character; } return ascii; } catch (Exception ex) { Console.WriteLine(ex.Message); } return string.Empty; }
有 四 这里有三个问题:
由于您在每次迭代时将这实际上并不重要; 在最后一次迭代之后递增2将使计数器高于检查长度而不管。i
递增2,因此需要以hexString.Length - 1
结束。- 你从
hexString
获取了错误的字符hexString
。 -
hs
从未使用过。 - 你没有附加任何东西给
sb
。
试试这个:
for (int i = 0; i < hexString.Length; i += 2) { string hs = hexString.Substring(i, 2); sb.Append(Convert.ToChar(Convert.ToUInt32(hs, 16))); }
请注意,不需要使用其命名空间System
来限定类型(假设您已using
语句在文件顶部引用它)。
String hs = hexString.Substring(i, i + 2); System.Convert.ToChar(System.Convert.ToUInt32(hexString.Substring(0, 2), 16)).ToString();
你注意到你从来没有使用过hs
吗?
你是不是一遍又一遍地转换前2个字符?
由于您将索引递增2,因此需要在字符串长度的前端停止循环。 否则,循环的最后一次迭代将尝试读取字符串末尾的字符。
for (int i = 0; i < hexString.Length - 1, i += 2)