Двоичный массив C # "{84, 01, 00, 00}" изменен на "54 01 00 00" в реестре Windows - PullRequest
2 голосов
/ 15 июля 2011

Я использую C # для записи следующего двоичного значения в системный реестр:

  byte[] valueToSet = { 84, 01, 00, 00 };
  Registry.SetValue(keyName, "00036601", valueToSet);
  // returns void as expected.

Когда я просматриваю записанное значение с помощью regedit, я вижу отображаемое значение как 54 01 00 00. Этоневерно

И наоборот, когда я вручную устанавливаю значение 84,01,00,00 в реестре и запускаю этот код

object ttt = Registry.GetValue(keyName, "00036601", null);
// returns 132, 1, 0, 0

Это проблема с порядком байтов?Как правильно это исправить?

Ответы [ 5 ]

10 голосов
/ 15 июля 2011

Это шестнадцатеричная проблема. RegEdit отображает значения в шестнадцатеричном формате, а вы работаете с десятичным в C #.

Два значения эквивалентны:

0x54 == 84
7 голосов
/ 15 июля 2011

Редактор реестра отображает значение в шестнадцатеричном формате.Десятичное значение 84 равно шестнадцатеричному значению 0x54, а шестнадцатеричное 0x84 равно десятичному 132.

3 голосов
/ 15 июля 2011

Я думаю, вы пытаетесь указать литералы в hex . Однако без шестнадцатеричного префикса 0x компилятор интерпретирует их как десятичные числа .

Попробуйте вместо этого:

byte[] valueToSet = { 0x84, 0x01, 0x00, 0x00 };
2 голосов
/ 15 июля 2011

Значения, указанные в реестре для двоичных типов, указаны в шестнадцатеричном формате.Десятичное число 84 == гекс 0x54.

1 голос
/ 15 июля 2011

Интересно отметить, что 84 (десятичный) == 54 (шестнадцатеричный)

...