![]() |
#2
风吹过b2016-06-21 16:23
刚学一个命令,就用了。虽然C程序执行效率更高,但单纯用VB也能实现这个功能。
代码中使用的是二种方法,方法一实现方法与C完全不同。 ![]() 方法二,与C实现的原理是相同的 ![]() Option Explicit Private Type LongType '4字节 Value As Long End Type Private Type ByteType '4字节 Value(0 To 3) As Byte End Type Private Sub Command1_Click() '调用测试 Cls Dim a(3) As Byte Dim b As Long Dim i As Long '测试数据 a(0) = 56 a(1) = 64 a(2) = 32 a(3) = 21 '生成32位长整数 Print "方法一" b = ComposeIntParam(a()) Print b '清理数组 For i = 0 To 3 a(i) = 0 Next i '生成字节数组 Call DecomposeIntValue(a(), b) For i = 0 To 3 Print a(i) Next i '方法二 Print "方法二" b = ComposeIntParam2(a()) Print b '清理数组 For i = 0 To 3 a(i) = 0 Next i '生成字节数组 Call DecomposeIntValue2(a(), b) For i = 0 To 3 Print a(i) Next i End Sub Public Function ComposeIntParam(param1() As Byte) As Long '4byte 转 1 long '低位在前 Dim i As Long Dim b As ByteType Dim l As LongType '把参数放入字节结构 For i = 0 To 3 b.Value(i) = param1(i) Next i '转长整数结构 LSet l = b '输出值 ComposeIntParam = l.Value End Function Public Sub DecomposeIntValue(a() As Byte, chValue As Long) '1 long 转 4 byte '低位在前 Dim i As Long Dim b As ByteType Dim l As LongType '把参数放入结构 l.Value = chValue '转字节数组 LSet b = l '转输出数组 For i = 0 To 3 a(i) = b.Value(i) Next i End Sub Public Function ComposeIntParam2(param1() As Byte) As Long '4byte 转 1 long '低位在前 ComposeIntParam2 = param1(3) * 256& * 256 * 256 ComposeIntParam2 = ComposeIntParam2 + param1(2) * 256& * 256 ComposeIntParam2 = ComposeIntParam2 + param1(1) * 256& ComposeIntParam2 = ComposeIntParam2 + param1(0) End Function Public Sub DecomposeIntValue2(a() As Byte, chValue As Long) '1 long 转 4 byte '低位在前 Dim j As Long a(3) = Int(chValue / (256& * 256 * 256)) j = chValue - a(3) * 256& * 256 * 256 a(2) = Int(j / (256& * 256)) j = j - a(2) * 256& * 256 a(1) = Int(j / 256&) a(0) = j - a(1) * 256& End Sub |
请问怎样用VB来实现下面C程序,怎样进行移位运算
//将4个8位参数组合成32位整型
int ComposeIntParam(unsigned char *param1)
{
int tempdata;
tempdata = param1[0] << 24;
tempdata |= param1[1] << 16;
tempdata |= param1[2] << 8;
tempdata |= param1[3];
return tempdata;
}
//分解32位整型为4个8字节数
void DecomposeIntValue(unsigned char *a,int
chValue)
{
a[0] = chValue >> 24;
a[1] = chValue >> 16;
a[2] = chValue >> 8;
a[3] = chValue;
}