从 VB.NET 中的注册表获取实际 REG_DWORD 十进制数的另一种方法?

问题描述

我一直在将 GetValue 与 GetValueKind 一起使用,并且在读取大于有符号 32 位整数的 DWORD 时遇到了一个问题。我可以无限制地写入注册表,最大为 4294967295(十六进制为 ffffffff)。

如果有办法用 int64 做到这一点,那么我就不会受到限制..

如果我可以读取十六进制值,我就可以完成这项工作,我可以通过 int64 将其转换为十进制,但同样,我不知道如何从注册表中读取十六进制值..

当正确的值超过 2,147,483,647 的有符号 32 位整数值时,我是否应该采取另一种方法来读取正确的值?

谢谢

解决方法

DWORD 是 32 位无符号整数 - 不是有符号整数,因此请改用 UInt32

根据2.2.9 DWORD

DWORD 是 32 位无符号整数(范围:0 到 4294967295 十进制)。因为 DWORD 是无符号的,所以它的第一位(最重要的 位 (MSB)) 不保留用于签名。

Data Type Summary (Visual Basic)

enter image description here enter image description here

资源

,
Dim PATH as string = "HKEY_CURRENT_USER\Software\Test"
Dim NAME as string = "TestName"
Dim ft As String = "DOES_NOT_EXIST"
Dim gv As Object = Registry.GetValue(PATH,NAME,ft)
Dim gb As Byte() = BitConverter.GetBytes(CInt(gv))
Dim j As UInt32 = BitConverter.ToUInt32(gb,0)
Textbox1.text = j