Преобразование байтового массива в разделенную строку необработанных байтовых значений - PullRequest
0 голосов
/ 29 октября 2009

Я нахожусь в процессе создания приложения, которое будет отслеживать конкретные значения ключей реестра на предмет изменений и записывать эти изменения в текстовый файл.

В настоящее время я могу отслеживать изменения и знать, когда конкретные значения изменились, и собирать данные, хранящиеся в этих значениях. Проблема, с которой я столкнулся на данный момент, заключается в том, что тип возвращаемых данных - Байт, и я хочу сначала преобразовать его в String для отображения, поэтому я знаю, что он возвращает правильное значение и затем может быть сохранен в текстовом файле.

Причина, по которой я спрашиваю, состоит в том, что позже, когда пользователь в следующий раз войдет в систему, эти ключи будут созданы или изменены в соответствии с предыдущими значениями. (Делали это как способ сохранения пользовательских настроек, так как в настоящее время использовали обязательные профили).

Если у кого-нибудь есть совет, он будет признателен.

Ответы [ 5 ]

3 голосов
/ 29 октября 2009

Зависит от количества байтов.

Вам нужно выяснить, из какой кодировки были сгенерированы байты, затем написать что-то вроде этого:

string str = Encoding.UTF8.GetString(bytes);

В зависимости от того, как были созданы байты, вам может понадобиться Encoding.ASCII или Encoding.GetEncoding.

0 голосов
/ 29 октября 2009

Верно, теперь я смог решить эту проблему, сохранив значение реестра в байтовом массиве, а затем добавив каждую часть массива в строку, используя следующий код:

RegistryKey key = Registry.Users.OpenSubKey(e.RegistryValueChangeData.KeyPath);

            Byte[] byteValue = (Byte[])key.GetValue(e.RegistryValueChangeData.ValueName);

            string stringValue = "";

            for (int i = 0; i < byteValue.Length; i++)
            {
                stringValue += string.Format("{0:X2} ", byteValue[i]);
            }

Спасибо завсе предложения

0 голосов
/ 29 октября 2009

Вместо использования кодировки specidief, используйте код по умолчанию вашей системы:

    public string ReadBytes(byte[] rawData)
    {
        //the encoding will prolly be the default of your system
        return Encoding.Default.GetString(rawData);
    }
0 голосов
/ 29 октября 2009

Класс System.Text.Encoding имеет статические методы для преобразования байтов в строки. В вашем случае вы захотите использовать System.Text.Encoding.ASCII.GetString (bytes) . При необходимости используйте другие кодировки (UTF8, UTF16).

0 голосов
/ 29 октября 2009

Прежде чем преобразовать в строку, сначала нужно решить, в какой кодировке находятся байты.

Тогда:

System.Text.Encoding enc = System.Text.Encoding.ASCII;
string myString = enc.GetString(myByteArray );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...