Кажется, что вы пишете байтовый массив byte[]
, но читаете его как string
. Некоторые коды, такие как 0x35
, соответствуют действительным символам ASCII ('5'
), некоторые коды, такие как 0x00
, не являются и, таким образом, представлены как \x00
, поэтому у вас странная строка.
Попробуем разобрать составленную строку обратно в исходную byte[]
.
Во-первых, давайте избавимся от формата \x..
и получим допустимую строку с помощью регулярных выражений:
using System.Text.RegularExpressions;
...
string source = @"\xc9;\xfd5\x80\x00\xa9Z\xc9\x0fb\xef\x7f\xd6V]";
string result = Regex.Replace(
source,
@"\\x[0-9A-Fa-f]{2}",
m => ((char)Convert.ToInt32(m.Value.Substring(2), 16)).ToString());
Во-вторых, давайте получим byte[]
из строки, предполагая, что все символы ASCII:
byte[] array = result
.Select(c => (byte)c)
.ToArray();
Давайте посмотрим на array
:
Console.Write(string.Join(", ", array.Select(x => $"{x:x2}")));
Итог:
c9, 3b, fd, 35, 80, 00, a9, 5a, c9, 0f, 62, ef, 7f, d6, 56, 5d