c#二进制数组"{84, 01, 00, 00}"改为"54 01 000 000 &qu

本文关键字:quot qu 改为 二进制 数组 | 更新日期: 2023-09-27 18:02:26

我使用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

这是Endian问题吗?解决这个问题的正确方法是什么?

c#二进制数组"{84, 01, 00, 00}"改为"54 01 000 000 &qu

这是一个十六进制问题。RegEdit以十六进制显示值,而你在c#中使用的是十进制。

两个值相等:

0x54 == 84

注册表编辑器以十六进制形式显示该值。十进制值84等于十六进制值0x54,十六进制值0x84等于十进制值132。

我想你是想在十六进制中指定文字。但是,如果没有0x十六进制前缀,编译器将它们解释为小数

试试这个:

byte[] valueToSet = { 0x84, 0x01, 0x00, 0x00 };

注册表中显示的二进制类型的值是十六进制表示法。十进制84 ==十六进制0x54

值得注意的是84(十进制)== 54(十六进制)