2011-07-15 45 views
2

我使用C#編寫以下二進制值對系統註冊表:C#二進制數組 「{84,01,00,00}」 更改Windows中的 「54 01 00 00」 註冊表

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

當我查看使用註冊表編寫的值,我看到顯示值爲54 01 00 00.這是不正確的

相反,當我在註冊表中手動設置值爲84,01,00,00,並運行此代碼

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

這是一個Endian問題?什麼是解決這個問題的正確方法?

回答

10

這是一個十六進制問題。 RegEdit以十六進制顯示值,並且您在C#中使用十進制。

這兩個值是相等的:

0x54 == 84 
2

在註冊表中爲二進制類型中示出的值是十六進制表示法。十進制84 ==十六進制0x54。

7

註冊表編輯器以十六進制顯示值。十進制值84等於十六進制值0x54,和十六進制的0x84等於十進制132

+0

另外132等於的0x84。 –

+0

@David Grayson:確實。 :) – Sven

1

需要注意的有趣的事情是84(十進制)== 54(十六進制)

3

我認爲你正在嘗試以十六進制指定文字。但是,如果沒有0x十六進制前綴,編譯器會將它們解釋爲小數點

試試這個:

byte[] valueToSet = { 0x84, 0x01, 0x00, 0x00 }; 
相關問題