Я написал два метода для преобразования Hex-строки в ASCII и ASCII-строку в шестнадцатеричную строку. Но когда я сравниваю две строки, я получаю две разностные шестнадцатеричные строки.Hex-строка для преобразования ASCII и преобразования ASCII в Hex
Например: шестнадцатеричная строка = 6220000008a01000
преобразовать эту строку 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);
ulong decval = Convert.ToUInt64(hs, 16);
long deccc = Convert.ToInt64(hs, 16);
char character = Convert.ToChar(deccc);
ascii += character;
}
return ascii;
}
catch (Exception ex) { Console.WriteLine(ex.Message); }
return string.Empty;
}
и преобразовать это значение ASCII обратно в шестнадцатеричной строки с использованием ниже метода
public string ASCIItoHex(string Value)
{
StringBuilder sb = new StringBuilder();
byte[] inputByte = Encoding.UTF8.GetBytes(Value);
foreach (byte b in inputByte)
{
sb.Append(string.Format("{0:x2}", b));
}
return sb.ToString();
}
Но в качестве последней шестнадцатеричной строки я получаю ниже строки.
Hex строка = 6220000008c2a01000
Может кто-нибудь помочь мне, чтобы понять это, что случилось там?
Вы преобразовываете в шестнадцатеричную кодированную строку UTF8. Вы переходите к байту чтения строки _plain_ by by byte, предполагая, что поток ... ASCII. Это не. Некоторые символы в строке UTF8 могут содержать более одного байта. –
Действительно, любые двоичные данные с 0xa0 in являются * not * ASCII ... (Фактически вы на самом деле конвертируете его с использованием ISO-8859-1, который все еще не совпадает с UTF-8.) –
Сначала я конвертировать hex в ASCII. Когда я конвертирую одно и то же значение ASCII обратно в шестнадцатеричное, оно показывает разные значения. – soft009