vb 让一个数组合成高4位,低4位的 形式
假如高4位是6a2,低4位为5b,我想让他组合成&H06a2005b的形式,就是说没有满4位的,自动在前面添加补0,构成4位。虽然用len可以判断长度然后在补0,但是不想...
假如高4位是 6a2 ,低4位为 5b ,我想让他组合成 &H06a2005b 的形式 ,就是说 没有满4位的,自动在前面添加补0, 构成4位 。 虽然用len可以判断长度 然后在补0, 但是不想用这个方法, 有没有其他的办法,好像有个方法是什么移位的
回bandaojun, 我传入两个参数, 一个为纵坐标,一个横坐标, 要把这两个转换成一个16进制的数,然后纵坐标在高4位,横坐标在低4位。 比如坐标为( 50,100) 转换后为 (&H32,&H64) 然后把这个坐标组合成 &H00640032 这样的形式(横纵坐标各占4位) 如何实现这样的组合
——————————————————————
也就是说1楼和3楼的意见是一样的, 都是判断长度是否为4,然后补零的方法吗,我自己也是用这个方法的···
baiyiqnypl 的那个函数没用过,学习一下 展开
回bandaojun, 我传入两个参数, 一个为纵坐标,一个横坐标, 要把这两个转换成一个16进制的数,然后纵坐标在高4位,横坐标在低4位。 比如坐标为( 50,100) 转换后为 (&H32,&H64) 然后把这个坐标组合成 &H00640032 这样的形式(横纵坐标各占4位) 如何实现这样的组合
——————————————————————
也就是说1楼和3楼的意见是一样的, 都是判断长度是否为4,然后补零的方法吗,我自己也是用这个方法的···
baiyiqnypl 的那个函数没用过,学习一下 展开
3个回答
展开全部
我的办法是这样的:
a=right("0000" & "6a2",4)
b=right("0000" & "5b",4)
c="&H" & a & b
虽然笨了点儿,但这方法比较可靠。
例如坐标为x,y
a=right("0000" & hex(x),4)
b=right("0000" & hex(y),4)
c="&H" & a & b
就行了,
对于x,y的提取,用len判断长度,然后mid方式安位取数,去掉第一位和最后一位括号,然后判断是否为逗号,是则将逗号前面的数据赋值给x,后面的赋值给y,然后继续用我那方法。嘿嘿
a=right("0000" & "6a2",4)
b=right("0000" & "5b",4)
c="&H" & a & b
虽然笨了点儿,但这方法比较可靠。
例如坐标为x,y
a=right("0000" & hex(x),4)
b=right("0000" & hex(y),4)
c="&H" & a & b
就行了,
对于x,y的提取,用len判断长度,然后mid方式安位取数,去掉第一位和最后一位括号,然后判断是否为逗号,是则将逗号前面的数据赋值给x,后面的赋值给y,然后继续用我那方法。嘿嘿
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Private Sub Command1_Click()
Dim h As Integer
Dim l As Integer
h = &H123
l = &H456
Print Hex(MAKEPARAM(h, l))
End Sub
Private Function MAKEPARAM(ByVal h As Integer, ByVal l As Integer) As Long
Dim R As String
R = String(4 - Hex(h), "0") & Hex(h) & String(4 - Hex(l), "0") & Hex(l)
MAKEPARAM = CDec("&h" & R)
End Function
'必须用len,VB6.0里不支持任何移位运算,到了.NET才有这样的运算类型
Dim h As Integer
Dim l As Integer
h = &H123
l = &H456
Print Hex(MAKEPARAM(h, l))
End Sub
Private Function MAKEPARAM(ByVal h As Integer, ByVal l As Integer) As Long
Dim R As String
R = String(4 - Hex(h), "0") & Hex(h) & String(4 - Hex(l), "0") & Hex(l)
MAKEPARAM = CDec("&h" & R)
End Function
'必须用len,VB6.0里不支持任何移位运算,到了.NET才有这样的运算类型
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这位同志,回答之前先说下,按你上面的数据,是一个long型的
也就是4字节有,你说的只是前二字节和后两字节,按位算的话是,前16位,后16位
Function MYFun(L2Byte As Integer, R2Byte As Integer) As Long
MYFun = Val("&H" & Hex(L2Byte) & "0000") Or R2Byte
End Function
好了,已经通过 VB6
下面是我试的,两种方法CopyMemory 才算真正的,哈
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" (Destination As Any, _
Source As Any, _
ByVal Length As Long)
Function MYFun(L2Byte As Integer, R2Byte As Integer) As Long
MYFun = Val("&H" & Hex(L2Byte) & "0000") Or R2Byte
End Function
Function MYFun2(L2Byte As Integer, R2Byte As Integer) As Long
Dim s As Long
CopyMemory s, R2Byte, 2
CopyMemory ByVal VarPtr(s) + 2, L2Byte, 2
MYFun2 = s
End Function
Private Sub Form_Paint()
Me.Print Hex(MYFun(&H10, &H22)), Hex(MYFun2(&H10, &H22))
End Sub
也就是4字节有,你说的只是前二字节和后两字节,按位算的话是,前16位,后16位
Function MYFun(L2Byte As Integer, R2Byte As Integer) As Long
MYFun = Val("&H" & Hex(L2Byte) & "0000") Or R2Byte
End Function
好了,已经通过 VB6
下面是我试的,两种方法CopyMemory 才算真正的,哈
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" (Destination As Any, _
Source As Any, _
ByVal Length As Long)
Function MYFun(L2Byte As Integer, R2Byte As Integer) As Long
MYFun = Val("&H" & Hex(L2Byte) & "0000") Or R2Byte
End Function
Function MYFun2(L2Byte As Integer, R2Byte As Integer) As Long
Dim s As Long
CopyMemory s, R2Byte, 2
CopyMemory ByVal VarPtr(s) + 2, L2Byte, 2
MYFun2 = s
End Function
Private Sub Form_Paint()
Me.Print Hex(MYFun(&H10, &H22)), Hex(MYFun2(&H10, &H22))
End Sub
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询