variant 如何转为integer??

askdfkkasdf askdfkkasdf 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
从串口读回数据aa = MSComm1.Input
想把他传递给process函数进行处理
请问为什么在传递0X2F、0XC9时提示“类型不匹配”,但是在传递0X38时却正常?
------------------------------------------------------------------------
Dim bbb As Variant
Dim aa As Variant

MSComm1.InputMode = 1 '二进读取制模式
If MSComm1.InBufferCount > 0 Then
aa = MSComm1.Input
ABuffer = aa
i = Hex(ABuffer(UBound(ABuffer)))
bbb = i
Process (bbb)

----------------------------------------------------------------------

Function Process(rec As Variant)
Dim CodeType
Static counttt

If (rec And &HC0) = &HC0 Then
CodeType = 1
counttt = 1
If (rec And &H20) = &H20 Then LeftKeyDown = True
If (rec And &H10) = &H10 Then RightKeyDown = True
If (rec And &H8) = &H8 Then Xup = True
If (rec And &H4) = &H4 Then Xdown = True
If (rec And &H2) = &H2 Then Yup = True
If (rec And &H1) = &H1 Then Ydown = True
GoTo label
End If
If (counttt = 1) Then
If (rec > 63) Then GoTo label
counttt = 2
X = rec And &H3F
GoTo label
End If
If (counttt = 2) Then
If (rec > 63) Then GoTo label
counttt = 3
Y = rec And &H3F
GoTo label
End If
label:
End Function
----------------------------------------------------------------
代码很幼稚,本人没学过VB,昨晚因为要实现一个上位机程序才在网站拼凑的,能实现我要求的功能就好
...全文

相关推荐

delphi variant的一些操作函数

网上下载的一些Variant操作函数,有需要的下载研究一下

zhouzhou19801005

85. BASIC和LotusScript中的Variant

缘起最近我回看以前记的关于Notes的笔记,发现在Notes bugs类别下,两条编号间隔一的竟然是相差无几的内容。2. 'Type mismatch' occurs if an nested array e.g. when an item of ColumnValues is an array, is assigned to a variant or passed as an argument

starrow

DELPHI Variant变量的使用技巧

delphi 为了完全支持OLE,32位Delphi 增加了Variant 数据类型,本节将从宏观角度来分析这种数据类型。实际上,Variant类型对Pascal语言有普遍而深入的影响,Delphi 控件库中与OLE 无关的地方也使用到这种类型。 Variant变量没有类型 一般说来,你可以用Variant 变量存储任何数据类型,对它执行各种操作和类型转换。需要注意的是:这违反了Pascal 语言的一贯原则,有悖于良好的编程习惯。variant 变量的类型检查和计算在运行期间才进行,编译器不会提示代码中的潜在错误,这些错误在进一步测试中才能发现。总之,你可以认为包含variant变量的代码是解释性代码,正如解释性代码一样,许多操作直到执行时才能知道,这对代码运行速度会有很大的影响。 上面对Variant 类型的使用提出了警告,现在来看看Variant 类型究竟能干什么。基本上说,如果声明了一个variant 变量: var V: Variant; 你就可以把各种不同类型的值赋给它: V := 10; V := 'Hello, World'; V := 45.55; 一旦得到一个variant 值,你可以把它拷贝给任何兼容或不兼容的数据类型。如果你把值赋给不兼容的数据类型,Delphi 会力尽所能进行转换,无法转换则颁布一个运行时间错误。实际上,variant变量中不仅包含了数据还包含有类型信息,并允许一系列运行时间操作,这些操作很方便,但运行速度慢且安全性差。 见例VariTest,它是上面代码的扩展。窗体上有三个编辑框,一对按钮,第一个按钮的OnClick 事件代码如下: procedure TForm1.Button1Click(Sender: TObject); var V: Variant; begin V := 10; Edit1.Text := V; V := 'Hello, World'; Edit2.Text := V; V := 45.55; Edit3.Text := V; end; 很有趣是不是?你可以把一个值为字符串的variant 变量赋给编辑框Text 属性,还可以把值为整数或浮点数的variant 变量赋给Text属性。正如你在图10.1中所看到的,一切正常。 (图10.1)按Assign按钮后,例VariTest的输出结果 图 10.1: 例 VariTest 的 Assign 按钮 Click 事件输出结果 更糟糕的是:你还可以用variant变量计算数值,从第二个按钮的Click事件代码就可看到这一点: procedure TForm1.Button2Click(Sender: TObject); var V: Variant; N: Integer; begin V := Edit1.Text; N := Integer(V) * 2; V := N; Edit1.Text := V; end; 至少这种代码带有一定危险性,如果第一个编辑框包含了一个数字,那么一切运行正常;如果不是,将会引发异常。这里再重申一遍,如果不到万不得以,不要随便使用Variant 类型,还是应坚持使用传统的Pascal 数据类型和类型检查方法。在Delphi 和 VCL中,variant变量主要是用于 OLE 支持和数据库域的访问。 Variant类型内部结构 Delphi中定义了一个 variant 记录类型,TVarData,它与Variant 类型有相同的内存布局。你可以通过TVarData访问variant变量的实际类型。TVarData 结构中包含了Variant类型信息(由Vtype域表示)、一些保留域及当前值。 VType域的取值包括OLE 自动化中的所有数据类型,这些类型通常叫OLE 类型或variant 类型。以下是variant 类型的完整列表,按字母顺序排列: varArray varBoolean varByRef varCurrency varDate varDispatch varDouble varEmpty varError varInteger varNull varOleStr varSingle varSmallint varString varTypeMask varUnknown varVariant 你可以在Delphi 帮助系统的variants 主题下找到这些类型的说明。 还有许多操作variant 变量的函数,你可以用它们进行特定的类型转换,或通过它们获取variant变量的类型信息(例如VarType 函数),当你用variant变量写表达式时,Delphi会自动调用这些类型转换和赋值函数。另外还有操作variant 数组的例程,你可以通过帮助文件的Variant support routines 主题了解相关内容。 Variant类型运行很慢! Variant 类型代码运行很慢,不仅数据类型转换如此,两个值为整数的Variant 变量相加也是如此。它们几乎跟Visual Basic这种解释性代码一样慢!为了比较Variant变量和整型变量的运行速度,请看例VSpeed 。 程序中设置了一个循环,记录运行时间并在进程条中显示运行状态。下面是基于variant类型的一段代码,基于整型的代码与此相似: procedure TForm1.Button1Click(Sender: TObject); var time1, time2: TDateTime; n1, n2: Variant; begin time1 := Now; n1 := 0; n2 := 0; ProgressBar1.Position := 0; while n1 < 5000000 do begin n2 := n2 + n1; Inc (n1); if (n1 mod 50000) = 0 then begin ProgressBar1.Position := n1 div 50000; Application.ProcessMessages; end; end; // we must use the result Total := n2; time2 := Now; Label1.Caption := FormatDateTime ( 'n:ss', Time2-Time1) + ' seconds'; end; 记时这段代码值得一看,因为你可以把它用到任何类型的性能测试中。正如你所看到的,程序用Now 函数获取当前的时间,用FormatDateTime 函数格式化时间差,输出结果以分("n")和秒("ss")表示。除此之外,你可以用Windows API的GetTickCount 函数,该函数能精确显示操作系统启动后至当前的毫秒数。 从上例可见两者的速度差异非常之大,以至于不用精确记时也能看到这种差异。图10.2是在本人计算机上运行程序看到的结果。当然运行结果取决于运行程序的计算机,但是两者的数值比不会有太大变化。

huzhijun_2005

Excel-VBA宏编程实例源代码-转换Variant类型的引数.zip

Excel-VBA宏编程实例源代码-转换Variant类型的引数.zip

芝麻粒儿

VARIANT-CPP:简单的脚本语言,如变量类,可用于存储不同的标量类型,以及关联数组和常规数组

VARIANT-CPP VARIANT-CPP 库是一个简单的库,它提供了一个 Variant::Value 类,可用于存储几乎任何类型的变量。 这对于与非强类型技术交互的 C++ 程序很有用。 目前,值对象可以表示整数、字符串、变量向量或变量的字符串索引映射: # include < variant> int main () { // construct value to be an integer Variant::Value value = 10 ; // it can switch type during its lifetime value = " we are now a string " ; // it can also be turned into a regular integer based arr

看不见的天边
评论 15
收藏 已收藏
分享
返回顶部
askdfkkasdf
VB基础类 7,788 成员 197,583 内容