私はこれを使用して16進数の文字列を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);
}
しかし、私はアウトまたは境界の例外を受け取ります、それは明白なエラーであると確信していますが、私が試した他のコードも機能しません。私は何を間違えていますか?
このコードは16進文字列を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;
}
がある 四 ここで3つの問題:
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)));
}
型を名前空間System
で修飾する必要がないことに注意してください(ファイルの先頭でusing
ステートメントで参照したと仮定します)。
String hs = hexString.Substring(i, i + 2);
System.Convert.ToChar(System.Convert.ToUInt32(hexString.Substring(0, 2), 16)).ToString();
hs
を使用したことがないことに気づきましたか??
そして、あなたは最初の2文字を何度も変換していますか?
インデックスを2ずつ増やしているため、文字列の長さの1つ前のループを停止する必要があります。それ以外の場合、ループの最後の反復は、文字列の終わりを超えて文字を読み取ろうとします。
for (int i = 0; i < hexString.Length - 1, i += 2)