问题描述
我一直在将 GetValue 与 GetValueKind 一起使用,并且在读取大于有符号 32 位整数的 DWORD 时遇到了一个问题。我可以无限制地写入注册表,最大为 4294967295(十六进制为 ffffffff)。
如果有办法用 int64 做到这一点,那么我就不会受到限制..
如果我可以读取十六进制值,我就可以完成这项工作,我可以通过 int64 将其转换为十进制,但同样,我不知道如何从注册表中读取十六进制值..
当正确的值超过 2,147,483,647 的有符号 32 位整数值时,我是否应该采取另一种方法来读取正确的值?
谢谢
解决方法
DWORD 是 32 位无符号整数 - 不是有符号整数,因此请改用 UInt32
。
DWORD 是 32 位无符号整数(范围:0 到 4294967295 十进制)。因为 DWORD 是无符号的,所以它的第一位(最重要的 位 (MSB)) 不保留用于签名。
Data Type Summary (Visual Basic)
资源:
,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