Pet*_*ete 17 c# string hex ascii
我正在尝试将十六进制的字符串转换为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);
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个out或bounds异常,我确定它是一个明显的错误,但我尝试过的其他代码也不起作用.我究竟做错了什么?
小智 24
此代码将十六进制字符串转换为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;
}
Run Code Online (Sandbox Code Playgroud)
Wil*_*den 20
有 四 这里有三个问题:
i在每次迭代时递增2,因此需要终止于hexString.Length - 1.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)));
}
Run Code Online (Sandbox Code Playgroud)
请注意,不需要使用其命名空间限定类型System(假设您已使用using语句在文件顶部引用它).
由于您要将索引增加 2,因此您需要在字符串长度末尾之前停止循环。否则,循环的最后一次迭代将尝试读取字符串末尾之后的字符。
for (int i = 0; i < hexString.Length - 1, i += 2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69189 次 |
| 最近记录: |