当e = 23857200时,即e=&H16C0830时,分四个byte取出来,如第一个byte为&H01,第二byte为&H6C,第三个为08,第四个为30     MsgBox Desc_1Byte(e) 
    MsgBox Desc_2Byte(e) 
    MsgBox Desc_3Byte(e) '溢出,与最高位的符号有关吗?怎么处理呢
    MsgBox Desc_4Byte(e) Function Desc_1Byte(k As Long) As Byte 
    Dim m As Byte 
    m = (k And &HFF000000) / 16777216 
    Desc_5Byte = m 
End Function Function Desc_2Byte(k As Long) As Byte 
    Dim m As Byte 
    m = (k And &HFF0000) / 65536 
    Desc_6Byte = m 
End Function Function Desc_3Byte(k As Long) As Byte 
    Dim m As Byte 
    m = (k And &HFF00) / 256 '此处的&HFF00因为&H0000FF00,但前边四个0加不上去,出现溢出了,有什么方法保留这几个0吗    
    Desc_7Byte = m 
End Function Function Desc_4Byte(k As Long) As Byte 
    Dim m As Byte 
    m = (k And &HFF) 
    Desc_8Byte = m 
End Function 我发现这全部都有这个问题?

解决方案 »

  1.   

    我调用这些函数时折分一个long型数据时,发现溢出!请高手帮忙解决
      

  2.   

    (k And &HFF00) / 256 的值是93192,M最大255,不溢出才怪!
      

  3.   

    Function Desc_1Byte(k As Long) As Byte 
        Dim m As Byte 
        m = Val("&H" & Left(Right("0000000" & Hex(k), 8), 2))
        Desc_5Byte = m 
    End Function Function Desc_2Byte(k As Long) As Byte 
        Dim m As Byte 
        m = Val("&H" & Mid(Right("0000000" & Hex(k), 8), 3, 2))
        Desc_6Byte = m 
    End Function Function Desc_3Byte(k As Long) As Byte 
        Dim m As Byte 
        m = Val("&H" & Mid(Right("0000000" & Hex(k), 8), 5, 2))   
        Desc_7Byte = m 
    End Function Function Desc_4Byte(k As Long) As Byte 
        Dim m As Byte 
        m = Val("&H" & Mid(Right("0000000" & Hex(k), 8), 7, 2)) 
        Desc_8Byte = m 
    End Function 
      

  4.   

    try:
    Function Desc_1Byte(k As Long) As Byte 
        Dim m As long  
        m = (k And &HFF000000) \ 16777216 
        Desc_5Byte = m 
    End Function Function Desc_2Byte(k As Long) As Byte 
        Dim m As long 
        m = (k And &HFF0000) \ 65536 
        Desc_6Byte = m 
    End Function Function Desc_3Byte(k As Long) As Byte 
        Dim m As long 
        m = (k And &HFF00) \ 256
        Desc_7Byte = m 
    End Function Function Desc_4Byte(k As Long) As Byte 
        Dim m As long 
        m = (k And &HFF) 
        Desc_8Byte = m 
    End Function 
      

  5.   

    这个快:Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Function Desc_1Byte(k As Long) As Byte 
        Dim m(3) As Byte 
        CopyMemory m(0), a, 4
        Desc_1Byte = m(3) 
    End Function Function Desc_2Byte(k As Long) As Byte 
        Dim m(3) As Byte 
        CopyMemory m(0), a, 4
        Desc_2Byte = m(2) 
    End Function Function Desc_3Byte(k As Long) As Byte 
        Dim m(3) As Byte 
        CopyMemory m(0), a, 4
        Desc_3Byte = m(1) 
    End Function Function Desc_4Byte(k As Long) As Byte 
        Dim m(3) As Byte 
        CopyMemory m(0), a, 4
        Desc_4Byte = m(0) 
    End Function 
      

  6.   

    函数名贴错了,更正:Function Desc_1Byte(k As Long) As Byte 
        Dim m(3) As Byte 
        CopyMemory m(0), k, 4 
        Desc_1Byte = m(3) 
    End Function 余同。