Vb6 长翻译问题&;带有Visual Basic 6.0的H99FF

Vb6 长翻译问题&;带有Visual Basic 6.0的H99FF,vb6,hex,long-integer,type-conversion,Vb6,Hex,Long Integer,Type Conversion,我已经准备好把这篇文章写在《暮光之城》的“w”下了 我有一个用户控件类,并且在定义中有它 Private Const m_def_FillColor As Long = &H99FF 然后: 现在,如果我在即时窗口中进行调查: ? m_def_FillColor -26113 ? &h99ff -26113 我想,好的。这可能就是为什么我在尝试将其用作颜色时出错的原因。我检查十六进制值并得到: ? hex( m_def_FillColor ) FFFF99FF

我已经准备好把这篇文章写在《暮光之城》的“w”下了

我有一个用户控件类,并且在定义中有它

Private Const m_def_FillColor As Long = &H99FF   
然后:

现在,如果我在即时窗口中进行调查:

? m_def_FillColor
-26113 
? &h99ff
-26113 
我想,好的。这可能就是为什么我在尝试将其用作颜色时出错的原因。我检查十六进制值并得到:

? hex( m_def_FillColor )
FFFF99FF
奇怪吧

因此,我在即时窗口中检查值&h99ff:

? m_def_FillColor
-26113 
? &h99ff
-26113 
嗯。。奇怪吧

我尝试强制强制转换,并显式转换:

? clng( &h000099ff )
-26113 
为了“大便和露齿而笑”,我在两者之间做了一个转换:

? hex( clng( &h000099ff ) )
FFFF99FF
为了好玩,我看了一个非转化演员:

? hex( &h000099ff )
99FF
买吧,以防万一。我想,我要看看实际的十进制值是怎么回事:

? hex( clng( 39423 ) )
99FF
无论如何。我晚上要关机了,我想我有内存问题,只需要重新启动,我已经尝试重新启动项目,所以这不是问题所在

在任何情况下,有人见过这种问题吗

我希望重新启动并睡个好觉能“治愈”它

但是。。。我是在做一些明显的和/或无知的事情,还是完全遗漏了什么

我的目标是将值&h000099ff插入一个长值。我对VisualBasic编程很在行,这是我做了数十亿次的事情,所以我只想确保我没有遗漏一些明显的东西

晚安,提前谢谢你的帮助。。奇怪


我归咎于记忆问题。但还是不确定

大多数编程语言只有有符号整数的概念

只要分配它&h000099ff,它就会工作。但如果你读了它,它将被视为签名

您正在调用的函数只关心位,而不关心VB6如何解释它们

为什么首先要给变量指定一个常数。常量和字符串文字(它们以相同的方式结束)速度很快


对于颜色来说,它似乎是一个有趣的值。

在数字的末尾加上一个&

'1 form with:
'  1 command button : name=Command1
Option Explicit

Private Const A As Long = &H99FF
Private Const B As Long = &H99FF&

Private Sub Command1_Click()
  Print "A : " & CStr(A)
  Print "B : " & CStr(B)
End Sub

您的问题源于对现代计算机上用于存储整数的2的补码整数格式缺乏了解。
请特别阅读标志扩展部分

VB只有带符号的整数变量,因此指定&H99FF被解释为16位带符号2的补码整数,因为设置了最高有效位,所以它表示负数,十进制数为-26113。要将其转换为长(32位)并获得相同的有符号整数值,必须将其符号扩展为&HFFFF99FF,这是-26113的32位2的补码表示形式


将尾随&添加到常量中会告诉VB,&H99FF&已经是一个长(32位)值,因此在分配给长变量时不需要任何符号扩展转换。

那天晚上晚些时候,我实际发现了这一点,这可能是重复的,你很有把握!VB有时会变化无常!我一定很喜欢这些未记录的赋值功能。这很合乎逻辑:在vb6中,数字被视为整数。将常量声明为long将转换十六进制数的整数值(即负数)。。。。通过显式地将数字设为long,它从一开始就被视为long,因此,当它(再次)转换为long时,它不会是负数,就像const一样……请查看我上面评论的答案。如果您完整阅读我的示例,您会发现将您的值放入十六进制函数会将其降低到&h99ff,由于某些原因,这会不正确地转换为长函数。至于long和string绝对不是一回事。字符串是指向包含该值的已分配内存部分的指针,而long则直接包含该值。与字符串相比,使用常量数字操作要快得多。为什么是那种颜色?我正在设计LCARS自定义控件。为什么是常数?我不想更改初始颜色。您所做的只是在文本中添加一个不应该使用的过时类型字符。类型字符不是VB的一部分,即使它们可以工作。我花了好几年才学会不写这样的字符串。如果你不读它,比特保持不变。这是一个有符号的v的无符号的东西,实际上不是。虽然我对VB并不陌生,但这是我一段时间以来第一次使用它。问题很简单,如果我不在最后添加-,至少在我的宇宙中,那么它会自动转换为整数,而不管类型如何。。加上“&”,你会得到一个长的。再说一次,至少在我的世界里,字符串和字符串$转换成相同的东西。调出一个程序集级调试器,您应该会看到(至少在我的世界中)为分配生成的相同程序集。字符串操作的速度要慢得多,特别是在紧循环中。