Если вы попытаетесь понять, как работает код Ганса , вы легко придете к обратному преобразованию:
public static string AsciiToString(byte[] bytes) {
StringBuilder sb = new StringBuilder(bytes.Length);
foreach(byte b in bytes) {
sb.Append(b<=0x7f ? (char)b : '?');
}
return sb.ToString();
}
Вы также можете использовать LINQ, но хорошее решение доступно только в .NET 4.0:
string AsciiToString(byte[] bytes)
{
return string.Concat( bytes.Select(b => b <= 0x7f ? (char)b : '?') );
}
К сожалению, отсутствие перегрузки String.Concat (IEnumerable ) в предыдущих версиях платформы вынуждает вас использовать несколько уродливые и неэффективные:
string AsciiToString(byte[] bytes)
{
return string.Concat(
( bytes.Select(b => (b <= 0x7f ? (char)b : '?').ToString()) )
.ToArray()
);
}