ÕªÒª£ºVisual Basic µÄλ²Ù×÷¹¦ÄܽÏÈõ£¬ÉõÖÁÁ¬×î³£ÓõÄÒÆÎ»ÔËËã¶¼²»Ö§³Ö£¬Òò´ËÔÚʹÓã֣¿ª·¢ÖîÈçÊý¾Ý¼ÓÃÜ¡¢Ñ¹Ëõ¡¢Í¨ÐÅÖ®ÀàµÄ³ÌÐòʱÍùÍùÀ§ÄÑÖØÖØ¡£Õë¶ÔÕâÒ»ÎÊÌ⣬±¾ÎÄÏêϸµØ²ûÊÍÁËλ²Ù×÷µÄ±¾ÖÊ£¬²¢ÀûÓãףé£î32 £Á£Ð£Éº¯ÊýʵÏÖÁËÕûÐͱäÁ¿µÄ²ð·Ö¡¢ºÏ²¢¡¢ÒÆÎ»µÈ£Ö£Â²»Ö§³ÖµÄλ²Ù×÷¹¦ÄÜ¡£
¹Ø¼ü´Ê£ºVisual Basic¡¢Î»²Ù×÷¡¢ÒÆÎ»
Ò» ÒýÑÔ
¡¡¡¡±ÊÕßÔÚ±à³Ìʵ¼ùÖз¢ÏÖ£¬£Ö£Â¶Ôλ²Ù×÷µÄÖ§³Ö½öÏÞÓÚAND¡¢OR¡¢XOR¼¸ÖÖλÔËË㣬ԶԶ²»ÈçÆäËûµÄ¿ª·¢¹¤¾ßÄÇÑùÈ«Ãæ£¨ÈçVisual C++¡¢C++Builder¡¢DelphiµÈ¿ª·¢¹¤¾ß¶¼ÌṩÁËÕûÐαäÁ¿µÄÒÆÎ»¡¢²ð·Ö¡¢ºÏ²¢µÄÔËË㣩£¬Òò´ËÔÚʹÓã֣±àдÖîÈç¼ÓÃÜÖ®ÀàµÄͨÓÃÊý¾Ý´¦Àí³ÌÐòʱÍùÍùÀ§ÄÑÖØÖØ¡£ÎªÁËʹÒÔºóµÄ¿ª·¢¹¤×÷²»ÔÙÏÝÈ뽩¾Ö£¬ÎÒ¿ªÊ¼Ñ°ÇóÔöÇ¿VBλ²Ù×÷¹¦ÄܵÄͨÓ÷½·¨£¬ÒÔ´ïµ½Ò»ÀÍÓÀÒݵÄЧ¹û¡£
¡¡¡¡£Ö£ÂµÄÊý¾ÝÀàÐͲ»¹»·á¸»£¬ÕûÐÎÊýÖ»°üÀ¨Byte¡¢Integer¡¢LongÈýÖÖÀàÐÍ£¬·Ö±ð¶ÔÓ¦C++ÖÐµÄ unsigned char¡¢short ºÍ long ÀàÐÍ£¬¶øÎÒÃdz£ÓõĶþ×Ö½ÚÎÞ·ûºÅÕûÐÎunsigned short(Ò²½Ð¡°×Ö¡±¡¢Word)¡¢ËÄ×Ö½ÚÎÞ·ûºÅÕûÐÎunsigned long(Ò²½Ð¡°Ë«×Ö¡±¡¢DWord)ÔÚVBÖÐȴûÓб»Ö§³Ö¡£ µ«ºÃÔÚÎÞ·ûºÅÊýºÍÓзûºÅÊýÔÚ¶þ½øÖƵIJã´ÎÉÏûÓÐÈκβî±ð£¬²»Í¬Ö®´¦½öÔÚÓÚ±àÒëÆ÷¶Ô±äÁ¿µÄÀí½â¡£ÔÚ½øÐÐλ²Ù×÷ʱÎÒÃÇÖ»¹ØÐıäÁ¿µÄ¶þ½øÖÆÎ»£¬Òò´Ë£Ö£ÂÖеÄIntegerÀàÐÍ¿ÉÒÔµ±×÷WordÀàÐÍʹÓã¬LongÀàÐÍÔò¶ÔÓ¦DWord¡££¨´ËºóÎÄÖÐÌá¼°µÄIntegerÀàÐ;ùÖ¸VB IntegerÀàÐÍ£¬LongÀàÐ;ùÖ¸VB LongÀàÐÍ£¬Word ¡¢DWordÀàÐÍÔòÊDz»ÒÀÀµÓÚÌØ¶¨±àÒëÆ÷µÄ¶Ô¶þ×Ö½Ú¡¢ËÄ×Ö½ÚÕûÐÎÖµµÄͨÓóƺô£©ÔÙÀ´¿´Î»ÔËËã·½Ãæ£¬¿ÉÒÔ¿´³öVB²»Ö§³ÖÕûÐͱäÁ¿µÄ×óÒÆ¡¢ÓÒÒÆ¡¢²ð·Ö¡¢ºÏ²¢µÈ²Ù×÷¡£
¡¡¡¡¾¹ýÉÏÊöµÄ·ÖÎöÖ®ºó£¬ÒѾȷ¶¨Á˹¤×÷µÄ¿ÉÐÐÐԺ͹¤×÷Ä¿±ê£¬ÓÚÊDZÊÕß¾ö¶¨¿ª·¢Ò»¸öͨÓÃÄ£¿éÀ´ÔöÇ¿VBµÄλ²Ù×÷¹¦ÄÜ£¬Õâ¸öÄ£¿éÊÇ¿ÉÖØÓõģ¬Ö»Òª°ÑÕâ¸öÄ£¿é¼ÓÈ빤³ÌÖУ¬¾Í¿ÉÒÔÏóʹÓÃVBµÄÄÚÖú¯ÊýÒ»Ñù͸Ã÷µÄʹÓÃÄ£¿éÖеĺ¯Êý£¬·Ç³£·½±ã¡£Èç¹ûʹÓôóÁ¿µÄ¿ÉÖØÓÃÄ£¿éÀ´¿ª·¢³ÌÐò£¬Ôò¿ª·¢ÖÜÆÚ¶Ì£¬´úÂë¿É¶ÁÐԺã¬Ò×ÓÚά»¤£¬²»ÈÝÒ׳ö´í¡£
¶þÉè¼ÆË¼Â·
1. ʵÏÖÕûÐαäÁ¿µÄ²ð·Ö¡¢ºÏ²¢
¡¡¡¡ÕûÐͱäÁ¿µÄ²ð·Ö¡¢ºÏ²¢ÊǾ³£ÒªÓõ½µÄ²Ù×÷£¬±ÈÈçIPµØÖ·¾ÍÊÇÒ»¸öËÄ×Ö½ÚµÄË«×Ö£¬ÓÐʱºòΪÁËÒÔµã·ÖÊ®½øÖƵķ½Ê½ÏÔʾIPµØÖ·£¬¾ÍÐèÒªµ¥¶ÀÈ¡³öÿ¸ö×Ö½ÚµÄÖµ£¬¶øÓÐʱºòΪÁ˰ѵã·ÖÊ®½øÖƵÄIPµØÖ·×ª»»Îª¼ÆËã»úÄÚ²¿µÄË«×Ö£¬ÓÖÐèÒª°ÑËĸö×Ö½Ú×éºÏ³ÉÒ»¸öË«×Ö¡£VBûÓÐÌṩÕâÑùµÄ¹¦ÄÜ£¬ËùÒÔÕûÐͱäÁ¿µÄ²ð·Ö¡¢ºÏ²¢Ò²ÊÇÎÒÃÇÕâ´ÎҪʵÏֵŦÄÜ¡£ÁíÍâÕûÐͱäÁ¿µÄ²ð·Ö¡¢ºÏ²¢Ò²ÊÇʵÏÖInteger¡¢LongÀàÐͱäÁ¿ÒÆÎ»µÄǰÌáÌõ¼þ(ºóÃæ¡°·Ö¶øÖÎÖ®²ßÂÔ¡±½«»áÌáµ½)£¬Ö»ÒªÊµÏÖÁËÕûÐͱäÁ¿µÄ²ð·ÖºÏ²¢£¬ÒÆÎ»ÎÊÌâ¾ÍÍêÈ«½â¾öÁË¡£
·½·¨1£ºÀûÓÃAPIº¯ÊýCopymemoryʵÏÖ
¡¡¡¡ÔÚÕâÀï±ÊÕßÀûÓÃWin32 API º¯ÊýCopyMemoryʵÏÖÁËÕûÐαäÁ¿µÄ²ð·Ö¡¢ºÏ²¢²Ù×÷¡£ÔÚVBÖÐʹÓÃAPIº¯Êý±ØÐëÒªÉùÃ÷£¬CopyMemoryº¯ÊýµÄÉùÃ÷´úÂëÈçÏ£º
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any£¬ Source As Any£¬ ByVal Length As Long)
¡¡¡¡ÆäÖеIJÎÊýDestinationÊÇÄ¿±êÄÚ´æµÄµÚÒ»¸ö×Ö½ÚµØÖ·£¬²ÎÊýSourceÊDZ»¸´ÖÆÄÚ´æµÄµÚÒ»¸ö×Ö½ÚµØÖ·£¬²ÎÊýLengthÊÇÐèÒª¸´ÖƵÄ×Ö½ÚÊý¡£
¡¡¡¡ÊµÏÖÔÀíºÜ¼òµ¥£ºÒªÊµÏÖ²ð·Ö£¬¾ÍÓÃCopyMemoryº¯Êý°ÑÒ»¸öÕûÐαäÁ¿µÄÒ»²¿·Ö¿½±´µ½ÁíÒ»¸ö¸üСµÄÕûÐαäÁ¿µÄµØÖ·¿Õ¼äÖУ»¶øÊµÏֺϲ¢£¬ÔòÀûÓÃCopyMemoryº¯Êý°ÑÁ½¸ö´ýºÏ²¢µÄС±äÁ¿¿½±´µ½ÁíÒ»¸ö´óÕûÐαäÁ¿µÄµØÖ·¿Õ¼äÖС£¼ûʾÀý´úÂ룺 Public Function Hi(ByVal Word As Integer) As Byte
'ȡһ¸ö×Ö£¨Word£©µÄ¸ß×Ö½Ú£¨Byte£©
'INPUT-------------------------------------------
'Word ×Ö£¨Word£©
'OUTPUT------------------------------------------
'·µ»ØÖµ Word²ÎÊýµÄ¸ß×Ö½Ú
'Last updated by Liu Qi 2004-3-20¡£
Dim bytRet As Byte
CopyMemory bytRet£¬ ByVal VarPtr(Word) + 1£¬ 1¡¯°ÑWordµÄ¸ß×Ö½ÚµÄÄÚÈÝ¿¾ÈëbytRetµÄµØÖ·´¦
Hi = bytRet¡¯·µ»Ø½á¹û
End Function
¡¡¡¡¸ù¾ÝÊý¾ÝÀàÐ͵IJ»Í¬ÐèÒª£¬±ÊÕß¹²Éè¼ÆÁË6¸öº¯Êý£¬HI£¨£©º¯ÊýÓÃÀ´»ñµÃÒ»¸öµ¥×ֵĸß×Ö½Ú£¬LO£¨£©º¯Êý»ñµÃµ¥×ֵĵÍ×Ö½Ú£¬HIWORD£¨£©º¯Êý»ñµÃË«×ֵĸßλ×Ö£¬LOWORD£¨£©º¯ÊýË«×ֵĵÍλ×Ö¡££Ã£Ï£Î£¨£©º¯Êý°ÑÁ½¸ö×Ö½Ú×éºÏ³É×Ö£¬CONWORD£¨£©º¯Êý°ÑÁ½¸ö×Ö×éºÏ³ÉË«×Ö¡£Ö»Òª°ÑÕ⣶¸öº¯Êý×éºÏÓ¦ÓþͿÉÒÔËæÒâµÄ²ð·Ö¡¢×éºÏ¸÷ÖÖÕûÐͱäÁ¿¡£ÀýÈçÇ°ÃæÌáµ½µÄ£É£ÐµØÖ·£¬£É£ÐµØÖ·ÊÇÓÃÒ»¸ö£Ä£×£Ï£Ò£ÄÀàÐͱäÁ¿´æ´¢µÄ£¬ÔÚ£Ö£ÂÖÐÔò¶ÔÓ¦LongÀàÐͱäÁ¿£¬¼ÙÉèÒ»¸ö£É£ÐµØÖ·´æ´¢ÔÚ³¤ÕûÐͱäÁ¿ÖУ¬¾Í¿ÉÒÔÕâÑùÌáȡһ¸ö£É£ÐµØÖ·µÄ×î¸ß×Ö½Ú£º£È£É£¨£È£É£×£Ï£Ò£Ä£¨lng£É£Ð£©£©¡£
¡¡¡¡ÓÉÓÚ´úÂë½Ï³¤£¬¹ÊûÓÐÔÚÎÄÕÂÖÐд³öÈ«²¿´úÂë¡£
·½·¨2£ºÀûÓð²È«Êý×é½èÓÃÄÚ´æµÄ·½·¨ÊµÏÖ
¡¡¡¡·½·¨1ËäÈ»ÓÃÆðÀ´¼òµ¥·½±ã£¬µ«ÊÇÒªÖ´ÐÐAPIº¯Êýµ÷Ó㬺¯Êýµ÷ÓÃʱҪ±£´æÏÖ³¡¡¢»Ö¸´ÏÖ³¡£¬Ê±¼ä¿ªÏúºÜ´ó£¬Ð§ÂÊÌ«µÍ£¬Òò´Ë²»ÊʺϴóÊý¾ÝÁ¿Ãܼ¯ÔËËãµÄ³¡ºÏ¡£±ÊÕßÔÚ¿ª·¢¼ÓÃÜÈí¼þÊ±ÔøÊ¹Ó÷½·¨1À´´¦ÀíÎļþÊý¾Ý£¬Ð§¹ûºÜ²»ÀíÏ룬ËÙ¶ÈÆæÂý¡£ÆäʵÓÐÒ»ÖÖ·½·¨¿ÉÒÔÇÉÃîµÄƹýVB£¬ÈÃÒ»¸öÊý×éÖ±½Ó·ÃÎÊÆäËû±äÁ¿µÄÄÚ´æ¿Õ¼ä£¬´Ó¶ø´ïµ½²ð·Ö¡¢ºÏ²¢ÕûÐαäÁ¿µÄÄ¿µÄ¡£ÓÉÓÚÕâÖÖ·½·¨Ê¡È¥ÁËAPIº¯Êýµ÷Óã¬Òò´ËЧÂʷdz£¸ß¡£ÏÂÃæ¾ÍÈÃÎÒÃÇÈÏʶһÏÂVBÖеݲȫÊý×é¡£VBÖеݲȫÊý×éÓëCÓïÑÔÖеÄÊý×éÓкܴóµÄ²î±ð£¬ËäÈ»ÔÚVBºÍCÓïÑÔÖÐÊý×é±äÁ¿¶¼ÊÇÖ¸Õ룬µ«CÓïÑÔÖеÄÊý×é±äÁ¿Ö±½ÓÖ¸ÏòÊý×éÔªËØ£¬¶ø VBÖеÄÊý×é±äÁ¿È´ÊÇÖ¸ÏòÒ»¸öSafeArray½á¹¹£¬Õâ¸öSafeArray½á¹¹ÖеÄpvDataÓò²ÅÖ¸ÏòÊý×éÔªËØ¡£
¡¡¡¡ÄÇôÕâ¸öSafeArray½á¹¹ÊÇ×öʲôÓõÄÄØ£¿Ëü´æ´¢×ÅÊý×éµÄÉϽ硢Ͻ硢άÊý¡¢ÔªËØ´óСµÈһϵÁеÄÐÅÏ¢£¬ÕýÊÇSafeArray½á¹¹µÄ´æÔÚ£¬Ê¹µÃVB³ÌÐòÄܹ»¶ÔÊý×éµÄ·ÃÎÊ×öÔ½½ç¼ì²é£¬Õâ¾ÍÊÇΪʲôVBÖеÄÊý×é½Ð×ö°²È«Êý×éµÄÔÒò£¬¶øCÓïÑÔÖеÄÊý×éÏÔÈ»²»¾ß±¸Ô½½ç¼ì²éµÄÄÜÁ¦¡£µ±È»°²È«Êý×éµÄȱµã¾ÍÊÇûÓÐCÓïÑÔµÄÊý×éÁé»î£¬µ«¾¡¹ÜÈç´Ë£¬ÎÒÃÇ»¹ÊÇÓа취²Ù×ÝËü£¬Í¨¹ý¶Ô°²È«Êý×éµÄ²Ù×Ý£¬¿ÉÒÔÈÃËü·ÃÎÊÈÎÒâµÄÄÚ´æÎ»Öã¬ÉõÖÁ°üÀ¨ÆäËû±äÁ¿µÄÄÚ´æ¿Õ¼ä¡£¶ÔÓÚһάÊý×éÀ´Ëµ£¬ËüµÄSafeArray½á¹¹ÈçÏ£º Type SafeArray1d '1άÊý×éµÄ SafeArray ¶¨Òå
cDims As Integer 'άÊý
fFeatures As Integer '±êÖ¾
cbElements As Long 'µ¥¸öÔªËØµÄ×Ö½ÚÊý
clocks As Long 'Ëø¶¨¼ÆÊý
pvData As Long 'Ö¸ÏòÊý×éÔªËØµÄÖ¸Õë
cElements As Long 'ά¶¨Ò壬¸ÃάµÄÔªËØ¸öÊý
Lbound As Long '¸ÃάµÄϽç
End Type
¡¡¡¡Èç¹ûÏÔʽµÄ¸øÒ»¸öÊý×é±äÁ¿¸³Öµ£¬ÈÃËüÖ¸ÏòÎÒÃÇ×Ô¼º´´½¨µÄSafeArray½á¹¹£¬¾Í¿ÉÒÔͨ¹ýÉèÖÃSafeArray½á¹¹µÄpvDataÓòÀ´·ÃÎÊÈÎÒâÄÚ´æÎ»Öá£Ç뿴ʾÀý´úÂ룺 Public Declare Function VarPtrArray Lib "msvbvm60.dll" _Alias "VarPtr" (ptr() As Any) As Long
Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (Destination As Any£¬ Source As Any£¬ ByVal Length As Long)
Private Sub Command2_Click()
Dim pBytesInLong() As Byte
Dim SA1D As SafeArray1d
Dim i As Long
With SA1D
.cDims = 1
.fFeatures = 17
.cbElements = 1
.clocks = 0
.pvData = VarPtr(i) 'ʹÊý×éµÄÊý¾ÝÖ¸ÕëÖ¸Ïò³¤ÕûÐαäÁ¿ i
.cElements = 4
.Lbound = 0
End With
'ʹÊý×é±äÁ¿£¨Æäʵ¾ÍÊǸöÖ¸Õ룩ָÏòÎÒÃÇ×Ô¼º´´½¨µÄ SafeArray1d ½á¹¹
CopyMemory ByVal VarPtrArray(pBytesInLong)£¬ VarPtr(SA1D)£¬ 4
i = &HFFFFFFFF
MsgBox pBytesInLong(1) '·ÃÎʳ¤ÕûÐαäÁ¿µÄµÚ2¸ö×Ö½Ú£¨´ÓµÍ´¦¿ªÊ¼Êý£©
pBytesInLong(3) = 0 '°ÑÈ«²¿Êý×éÔªËØÉèΪ0
pBytesInLong(2) = 0
pBytesInLong(1) = 0
pBytesInLong(0) = 0
MsgBox i 'Äã»á·¢ÏÖ i Ò²±ä³ÉÁË 0
'°ÑÊý×é±äÁ¿£¨Æäʵ¾ÍÊǸöÖ¸Õ룩ָÏò 0£¬¼È C ÓïÑÔÖÐµÄ NULL
CopyMemory ByVal VarPtrArray(pBytesInLong)£¬ 0&£¬ 4
End Sub
¡¡¡¡´Ó´úÂëÖпÉÒÔ¿´µ½ÎÒÃÇÓÃÒ»¸ö×Ö½ÚÊý×é½èÓÃÁ˳¤ÕûÐαäÁ¿iµÄµØÖ·¿Õ¼ä£¬´Ó¶ø¿ÉÒÔͨ¹ýÊý×éÔªËØ·ÃÎʱäÁ¿iµÄ¸÷¸ö×Ö½Ú¡£ÕâÑùҲʵÏÖÁ˲ð·Ö¡¢×éºÏÕûÐαäÁ¿µÄÄ¿µÄ£¬ºÍ·½·¨1Êâ;ͬ¹é£¬µ«ºÜÏÔÈ»·½·¨2²»ÐèÒªº¯Êýµ÷Ó㬲»ÐèÒªÊý¾Ý¸´ÖÆ£¬Òò´ËЧÂʷdz£¸ß¡£ÓÃÕâÖÖ·½·¨£¬ÎÒרÃŹ¹ÖþÁËÒ»¸öÄ£¿é£ºFastBitExÄ£¿é£¬ÊµÏÖÁË·½·¨1ÖÐÌá¼°µÄ6¸öº¯ÊýµÄFast°æ±¾£¬´úÂëºÜ³¤£¬²»ÔÚÕâÀï¸ø³ö£¬Çë¶ÁÕß²ÎÔÄ´úÂë¡£
2£®ÒÆÎ»ÔËËãµÄÉè¼ÆÊµÏÖ
¡¡¡¡ÔںܶàVBµÄ×ÊÁϺʹúÂëÖж¼ÓóËÒÔ2µÄ·½·¨ÊµÏÖ×óÒÆ£¬³ýÒÔ2µÄ·½·¨ÊµÏÖÓÒÒÆ¡£ÕâÊÇ¿ÉÐеģ¬Ò²ÊÇÓÐÀíÂÛÒÀ¾ÝµÄ¡£ÏÂͼÊÇÒ»¸öBYTEÀàÐ͵ÄȨֵ±í£º
λÐòºÅ |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Ȩֵ |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
¡¡¡¡¿ÉÒÔ¿´³öÿһλµÄȨֵ¶¼ÊDZÈËüµÍһλµÄÄÇһλµÄȨֵµÄ2±¶£¬¶ÔÒ»¸öBYTE±äÁ¿×óÒÆÒ»Î»Ï൱ÓÚÿһ¸ö¶þ½øÖÆÎ»¶¼Ïò¸ßÎ»ÒÆ¶¯£¬ÔòÿһλµÄȨֵ±äΪÔÀ´µÄÁ½±¶£¨×î¸ßλ³ýÍ⣩£¬ÓÉÓÚBYTE±äÁ¿µÄÊ®½øÖÆÖµµÈÓÚËüµÄÿ¸ö¶þ½øÖÆÎ»µÄÖµºÍ¸ÃλȨֵµÄ³Ë»ýµÄ×ܺͣ¬ËùÒÔ°ÑÒ»¸öBYTE±äÁ¿×óÒÆºÍ°ÑËüµÄÊ®½øÖÆÖµ³ËÒÔ2ÊǵÈЧµÄ£¬Î¨Ò»µÄÇø±ð¾ÍÊÇÈç¹ûBYTE±äÁ¿µÄ×î¸ßλΪ 1£¬³ËÒÔ2»áÒç³ö£¬ÎÒÃÇҪʹÓÃÒ»¸öС¼¼ÇÉ·ÀÖ¹Òç³ö£ºÏȰÑ×î¸ßλÆÁ±ÎΪ0£¬ÔÙ³ËÒÔ2¾Í²»»áÒç³öÁË¡£¾Ý´ËÎÒÃÇ¿ÉÒÔд³ö°ÑBYTEÀàÐͱäÁ¿×óÒÆ1λµÄº¯Êý£º Private Function ShLB_By1Bit(ByVal Byt As Byte) As Byte
¡®°ÑBYTEÀàÐͱäÁ¿×óÒÆ1λµÄº¯Êý£¬²ÎÊýBytÊÇ´ýÒÆÎ»µÄ×Ö½Ú£¬º¯Êý·µ»ØÒÆÎ»½á¹û
¡®(Byt And &H7F)µÄ×÷ÓÃÊÇÆÁ±Î×î¸ßλ¡£ *2£º×óÒÆÒ»Î»
ShLB_By1Bit = (Byt And &H7F) * 2
End Function
¡¡¡¡ÀàËÆµÄ°ÑBYTEÀàÐͱäÁ¿ÓÒÒÆ1λʱ²ÉÓóýÒÔ2µÄ·½·¨ £¬ÕâʱҪעÒâÉáȥСÊý룬ÒÔÃâVB°´ÕÕËÄÉáÎåÈëµÄ·½·¨´¦ÀíСÊýλ¶øÒýÆð½á¹û²»ÕýÈ·¡£¾Ý´ËÎÒÃÇ¿ÉÒÔд³ö°ÑBYTEÀàÐͱäÁ¿ÓÒÒÆ1λµÄº¯Êý£º Private Function ShRB_By1Bit(ByVal Byt As Byte) As Byte
¡®°ÑBYTEÀàÐͱäÁ¿ÓÒÒÆ1λµÄº¯Êý£¬²ÎÊýBytÊÇ´ýÒÆÎ»µÄ×Ö½Ú£¬º¯Êý·µ»ØÒÆÎ»½á¹û
¡®/2£ºÓÒÒÆÒ»Î»
ShRB_By1Bit = Fix(Byt / 2)
End Function
¡¡¡¡ÓÐÁËÒÆÒ»Î»µÄº¯Êý£¬ÄÇÃ´ÒÆÈÎÒâλÊýµÄº¯Êý¾Í²»ÄÑд³öÁË£ºÖ»Òª·´¸´µÄµ÷ÓÃShLB_By1Bit()»òShRB_By1Bit()¾Í¿ÉÒÔÁË£¬²Î¼û´úÂëÖеĺ¯ÊýShLB() ºÍ ShRB()¡£
¡¡¡¡ÖÁ´Ë×Ö½Ú±äÁ¿µÄÒÆÎ»ÎÊÌâÒѾµÃµ½½â¾ö£¬ÏÖÔÚÔÙÀ´¿´µ¥×ÖºÍË«×ÖµÄÒÆÎ»£¬ËüÃÇ·Ö±ð¶ÔÓ¦VBÖеÄIntegerºÍLongÀàÐÍ¡£ÓóËÒÔ2ºÍ³ýÒÔ2µÄ·½·¨»¹ÐÐÂð£¿Óü¸¸öÊýÊÔÑéһϾͻᷢÏÖ£¬Õâ¸ö·½·¨Ê§ÁéÁË¡£Çë¿´¸÷ÖÖÔËËã½á¹ûµÄ¶Ô±È£º
¡¡¡¡A=1001¡¯0111¡¯1110¡¯1100
¡¡¡¡ÓÒÒÆÒ»Î»£º 0100¡¯1011¡¯1111¡¯0110
¡¡¡¡£¨A/2£©£º1100¡¯1011¡¯1111¡¯0110
¡¡¡¡ÎÊÌâºÃÏó±äµÄÓе㸴ÔÓÁË£¬Æäʵµ¼ÖÂÕâ¸ö·½·¨Ê§ÁéµÄ×î¸ù±¾µÄÔÒòÊÇVB°ÑIntegerºÍLongÀàÐ͵±×öÓзûºÅÊýÀí½â£¬°ÑÒ»¸öÓзûºÅÊý³ËÒÔ2»ò³ýÒÔ2£¬×î¸ß루¼´·ûºÅ룩¸ù±¾¾ÍûÓвÎÓëÔËË㣬ÕâÒ»µã´ÓÉÏÃæµÄÔËËã½á¹û¶Ô±È¾Í¿ÉÒÔ¿´³öÀ´£º°ÑA³ýÒÔ2 ÒÔºó×î¸ßλ»¹ÊÇ1£¬¸ù±¾¾ÍûÓб䣬¶øÓÒÒÆÒ»Î»ºó×î¸ßλ²¹ÈëµÄÊÇ0£¬Á½ÖÖÔËËãµÄ½á¹û×ÔÈ»ÊÇÏàÈ¥ÉõÔ¶¡£²»Ö»ÊÇ·ûºÅλµÄÎÊÌ⣬Èç¹ûÑ¡ÓÃÆäËüµÄÊý¾ÝÀ´¶Ô±È»¹»á·¢ÏÖ¸ü¶àµÄÎÊÌ⣬ÕâÀï¾Í²»ÔÙ׸ÊöÁË¡£ÄѵÀ¾ÍÕæµÄûÓа취ÁËÂ𣿰취µ±È»ÊÇÓе쬼ÈÈ»ÒѾʵÏÖÁË×Ö½ÚµÄÒÆÎ»²Ù×÷£¬ÄÇô¿ÉÒÔ Óá°·Ö¶øÖÎÖ®¡±µÄ²ßÂÔ£¬°ÑInteger±äÁ¿Ò»·ÖΪ¶þ£¬²ð³ÉÁ½¸ö×Ö½Ú£¬°ÑÕâÁ½¸ö×Ö½Ú½»¸øShLB£¨£©»ò£Óh£Ò£Â£¨£©£¬°ÑËüÁ©¸÷ÒÆÒ»Î»£¬×îºó°ÑÒÆÎ»ºóµÄÁ½×Ö½ÚÖØÐÂ×éºÏ³ÉÒ»¸öInteger±äÁ¿¾ÍÊÇÒÆÎ»ºóµÄ½á¹ûÁË£¬Õâ²»¾ÍʵÏÖÁËIntegerÀàÐͱäÁ¿µÄÒÆÎ»ÁËÂð¡£ÕâÖÖ·½·¨ÍêÈ«ÈÆ¹ýÁËÓзûºÅÊýµÄ·ûºÅλ¸øÎÒÃÇ´øÀ´µÄÖÚ¶àÂé·³£¬Ë³ÀûµÄʵÏÖÁËÄ¿µÄ¡£ÓÃÕâÖÖ·½·¨ÐèҪעÒâÒ»µã£ºÈç¹ûÊÇ×óÒÆ£¬Òª±£Ö¤°ÑµÍ×Ö½ÚµÄ×î¸ßÎ»ÒÆÈë¸ß×Ö½ÚµÄ×îµÍ룬·´Ö®Èç¹ûÊÇÓÒÒÆ£¬Òª°Ñ¸ß×Ö½ÚµÄ×îµÍÎ»ÒÆÈëµÍ×Ö½ÚµÄ×î¸ßλ¡£´ÓÏÂÃæµÄ´úÂëÖпÉÒÔ¿´µ½ÊµÏֵĹý³Ì£º Private Function ShLW_By1Bit(ByVal Word As Integer) As Integer
'°ÑÒ»¸ö×Ö×óÒÆÒ»Î»µÄº¯Êý£¬ ²ÎÊýWordÊÇ´ýÒÆÎ»µÄ×Ö£¬º¯Êý·µ»ØÒÆÎ»½á¹û
'INPUT-------------------------------
'Word Ô´²Ù×÷Êý
'OUTPUT------------------------------
'·µ»ØÖµ ÒÆÎ»½á¹û
'last updated by Liu Qi 2004-3-24
Dim HiByte As Byte£¬ LoByte As Byte
'°Ñ×Ö²ð·ÖΪ×Ö½Ú
HiByte = Hi(Word)£º LoByte = Lo(Word)
'°Ñ¸ß×Ö½Ú×óÒÆÒ»Î»£¬±£Ö¤°ÑµÍ×Ö½ÚµÄ×î¸ßÎ»ÒÆÈë¸ß×Ö½ÚµÄ×îµÍλ
HiByte = ShLB_By1Bit(HiByte) Or IIf((LoByte And &H80) = &H80£¬ &H1£¬ &H0)
LoByte = ShLB_By1Bit(LoByte) 'µÍ×Ö½Ú×óÒÆÒ»Î»
'°ÑÒÆÎ»ºóµÄ×Ö½ÚÔÙÖØÐÂ×éºÏ³É×Ö
ShLW_By1Bit = Con(HiByte£¬ LoByte)
End Function
¡¡¡¡ÖÁÓÚLongÀàÐÍ£¬ºÍIntegerÀàÐÍÒ»Ñù£¬ÊôÓÚÓзûºÅÊý£¬Ò²²»ÄÜÓóËÒÔ2ºÍ³ýÒÔ2µÄ·½·¨ÊµÏÖÒÆÎ»¡£ÎÒÃÇÖ»ºÃºÍ´¦ÀíIntegerÀàÐÍÒ»ÑùÈç·¨ÅÚÖÆ£¬Ó÷ֶøÖÎÖ®µÄ·½·¨ÊµÏÖÒÆÎ»¡£¾ßÌå¹ý³Ì²»ÔÙ׸Êö£¬Çë²Î¿´´úÂë¡£
3.ÒÆÎ»ÔËËãµÄÐÔÄÜÓÅ»¯
¡¡¡¡±¾ÎÄÖеÄÒÆÎ»ÊµÏÖ·½·¨Æ«ÖØÓÚ´úÂëµÄ¿É¶ÁÐÔ£¬Ã»ÓÐÓÅ»¯´úÂëµÄÐÔÄÜ£¬Òò´Ë²»ÊÊÓÃÓÚ¶ÔÐÔÄÜÒªÇó¿Á¿ÌµÄ³¡ºÏ¡£ÎªÁËÓÅ»¯ÐÔÄÜ£¬¿ÉÒÔÓòé±í·¨À´ÓÅ»¯Ö´ÐÐËÙ¶È£¬ÕâÊÇÒ»ÖÖÄÿռ任ʱ¼äµÄ·½°¸£¬ÒÆÎ»½á¹û¿ÉÒÔÊÂÏȶ¼¼ÆËã³öÀ´£¬±£´æÔÚÒÆÎ»±íÖУ¬ÓõÄʱºò²é±í£¬±ÈÓÃ*2£¬/2¿ì¶àÁË¡£±ÈÈ磬×Ö½ÚÀàÐ͵ÄÒÆÎ»±íÊý×鶨ÒåÈçÏ£º¡¡ ¡¡¡¡dim aSHLB(0 to 255,1 to 7) as byte'×Ö½Ú×óÒÆ±í
¡¡¡¡dim aSHRB(0 to 255,1 to 7) as byte'×Ö½ÚÓÒÒÆ±í
¡¡¡¡Ê¹Ó÷½·¨Ò²ºÜ¼òµ¥£¬±ÈÈçÏëÒªÇó×Ö½Ú±äÁ¿x×óÒÆÒ»Î»µÄ½á¹û£¬Ö»ÐèʹÓÃaSHLB(x,1)¾Í¿ÉµÃµ½£¬ºÍº¯Êýµ÷ÓúÜÏàËÆ¡£µ±È»£¬Ó뺯Êýµ÷Óò»Í¬µÄÊÇ£¬Ê¹ÓÃÒÆÎ»±í֮ǰһ¶¨Òª³õʼ»¯ÒÆÎ»±íµÄËùÓÐÔªËØ£¬·ñÔò»áµÃµ½´íÎóµÄ½á¹û¡£
¡¡¡¡IntegerÀàÐ͵ÄÒÆÎ»Ò²¿ÉÒÔÓòé±í·¨£¬ÒÆÎ»±íÕ¼Óà 65535 * 15 * 2 * 2 ¸ö×Ö½ÚµÄÄÚ´æ¿Õ¼ä¡£
¡¡¡¡ÒÆÎ»±íÊý×鶨ÒåÈçÏ£º ¡¡¡¡aSHLW(0 to &Hffff&,1 to 15) as integer'µ¥×ÖµÄ×óÒÆ±í
¡¡¡¡aSHRW(0 to &Hffff&,1 to 15) as integer'µ¥×ÖµÄÓÒÒÆ±í
¡¡¡¡×¢Ò⣺IntegerÊÇÓзûºÅÀàÐÍ£¬Ôì±íµÄʱºòÒªÓÃËüµÄÎÞ·ûºÅÖµÀ´Ôì±í£¬Í¬Ñù²é±íµÄʱºòÒ²ÒªÓÃËüµÄÎÞ·ûºÅÖµÀ´²é±í¡££¨ÒòΪÊý×éϱêÊDz»ÔÊÐí¸ºÊýµÄ¡££©
¡¡¡¡ÇóIntegerÀàÐÍÎÞ·ûºÅÖµµÄ·½·¨ÊÇ£º(Int and &hFFFF&),×¢Ò⣬²»µÈͬÓÚCLng(Int)
¡¡¡¡Òź¶µÄÊÇ£¬LongÀàÐÍÎÞ·¨Ôì±í£¬ÒòΪLongÀàÐ͵ÄÖµµÄ·¶Î§ÊÇ 4 GB,Èç¹û¶ÔËüÔì±í£¬ÄÇô±íµÄ´óС¾Í»á³¬³ö×ܵÄÄÚ´æµØÖ·¿Õ¼ä¡£
¡¡¡¡²é±íÒÆÎ»µÄ´úÂëÇë²Î¼û±¾Îĸ½´øµÄ´úÂ룬ÕâÀï¾Í²»¸ø³öÁË¡£
Èý ½áÓï
¡¡¡¡ÒªÏëʵÏÖ±¾ÎÄËùÊöµÄÄÇЩλ²Ù×÷º¯ÊýÆäʵÓкܶ෽·¨£¬±¾ÎÄËùÓõķ½Ê½Î´±ØÊÇ×îºÃµÄ£¬Ö÷ÒªÊÇΪÁËÌṩһÖÖ½â¾öÎÊÌâµÄ˼·£ºÔÚ±à³Ì¹ý³ÌÖÐÓöµ½ÄÑÒÔ½â¾öµÄÎÊÌâʱ£¬ÏëÒ»ÏëÄܲ»ÄܰѴóÎÊÌâ·Ö½â³ÉÄܽâ¾ö»òÒѽâ¾öµÄСÎÊÌ⣬Õâ¾ÍÊÇ¡°·Ö¶øÖÎÖ®¡±µÄ²ßÂÔ¡£Òò±ÊÕßˮƽÓÐÏÞ£¬±¾ÎÄÄÑÃâ»áÓÐÊ詺Ͳ»×ãÖ®´¦£¬»¶ÓÅúÆÀÖ¸Õý£¬ÓÐÒâ¼û»ò½¨Ò鏸ÎÒ·¢µç×ÓÓʼþliuqi5521@sina.com¡£
¡¡¡¡±¾³ÌÐòÔÚ Win2000+VB6.0ϵ÷ÊÔͨ¹ý¡£
------------------------------------------------------------
±¾ÎÄÏà¹Ø´úÂ룺
-----------------------BitEx.Bas----------------------------
Option Explicit
'˵Ã÷---------------------------------------- 'ÕâÊÇÒ»¸öÔöÇ¿ vb µÄλ²Ù×÷¹¦ÄܵÄÄ£¿é£¬Ö÷Òª°üº¬ 'ÓÐ×óÓÒÒÆÎ»£¬È¡×Ö½Ú£¬×Ö½ÚÁ¬½ÓµÈͨÓÃÀý³Ì '¼æÈÝÐÔ£ºVB5.0 ,6.0 '--------------------------------------------
'×÷ÕߣºÁõçù £¬2005-1-11 '¸öÈËÖ÷Ò³£ºhttp://LQweb.crcoo.com 'e-Mail£ºliuqi5521@hotmail.com
'apiº¯Êý ¿½±´ÄÚ´æ Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" _ (Destination As Any, Source As Any, ByVal Length As Long)
'-----------------------ÏÂÃæÕâЩÀý³ÌʵÏÖÕûÐͱäÁ¿µÄ²ð·Ö£¬ºÏ²¢²Ù×÷------------- Public Function Con(ByVal HiByte As Byte, ByVal LoByte As Byte) As Integer '°ÑÁ½¸ö×Ö½Ú (Byte) Á¬³ÉÒ»¸ö×Ö £¨word£© 'INPUT-------------------------------------------------------------------- 'HiByte ²ÎÓëÁ¬½áµÄ¸ß×Ö½Ú 'LoByte ²ÎÓëÁ¬½áµÄµÍ×Ö½Ú 'OUTPUT------------------------------------------------------------------- '·µ»ØÖµ Á¬½áµÄ½á¹û 'Last updated by Liu Qi 2004-3-20. Dim iRet As Integer
'Óõ½µÄº¯Êý varptr() ˵Ã÷£ºÈ¡Ò»¸ö±äÁ¿µÄµØÖ·¡£
CopyMemory ByVal VarPtr(iRet), LoByte, 1 CopyMemory ByVal VarPtr(iRet) + 1, HiByte, 1
Con = iRet
End Function
Public Function ConWord(ByVal HiWord As Integer, ByVal LoWord As Integer) As Long '°ÑÁ½¸ö×Ö£¨Word£©Á¬³ÉÒ»¸öË«×Ö£¨DWord£© 'INPUT-------------------------------------------------------------------- 'HiWord ²ÎÓëÁ¬½áµÄ¸ßλ×Ö 'LoWord ²ÎÓëÁ¬½áµÄµÍλ×Ö 'OUTPUT------------------------------------------------------------------- '·µ»ØÖµ Á¬½áµÄ½á¹û 'Last updated by Liu Qi 2004-3-20. Dim lRet As Long
CopyMemory ByVal VarPtr(lRet), LoWord, 2 CopyMemory ByVal VarPtr(lRet) + 2, HiWord, 2
ConWord = lRet
End Function
Public Function Hi(ByVal Word As Integer) As Byte 'ȡһ¸ö×Ö£¨Word£©µÄ¸ß×Ö½Ú£¨Byte£© 'INPUT------------------------------------------- 'Word ×Ö£¨Word£© 'OUTPUT------------------------------------------ '·µ»ØÖµ Word²ÎÊýµÄ¸ß×Ö½Ú 'Last updated by Liu Qi 2004-3-20. Dim bytRet As Byte
CopyMemory bytRet, ByVal VarPtr(Word) + 1, 1
Hi = bytRet
End Function
Public Function Lo(ByVal Word As Integer) As Byte 'ȡһ¸ö×Ö£¨Word£©µÄµÍ×Ö½Ú£¨Byte£© 'INPUT------------------------------------------- 'Word ×Ö£¨Word£© 'OUTPUT------------------------------------------ '·µ»ØÖµ Word²ÎÊýµÄµÍ×Ö½Ú 'Last updated by Liu Qi 2004-3-20. Dim bytRet As Byte
CopyMemory bytRet, ByVal VarPtr(Word), 1
Lo = bytRet
End Function
Public Function HiWord(ByVal DWord As Long) As Integer 'ȡһ¸öË«×Ö£¨DWord£©µÄ¸ßλ×Ö 'INPUT------------------------------------------- 'DWord Ë«×Ö 'OUTPUT------------------------------------------ '·µ»ØÖµ DWord²ÎÊýµÄ¸ßλ×Ö 'Last updated by Liu Qi 2004-3-20. Dim intRet As Integer
CopyMemory intRet, ByVal VarPtr(DWord) + 2, 2
HiWord = intRet
End Function
Public Function LoWord(ByVal DWord As Long) As Integer 'ȡһ¸öË«×Ö£¨DWord£©µÄµÍλ×Ö 'INPUT------------------------------------------- 'DWord Ë«×Ö 'OUTPUT------------------------------------------ '·µ»ØÖµ DWord²ÎÊýµÄµÍλ×Ö 'Last updated by Liu Qi 2004-3-20. Dim intRet As Integer
CopyMemory intRet, ByVal VarPtr(DWord), 2
LoWord = intRet
End Function
'-------------------------ÏÂÃæÕâЩÀý³ÌʵÏÖÕûÐαäÁ¿µÄÒÆÎ»-------------------
Public Function ShLB(ByVal Byt As Byte, Optional ByVal BitsNum As Long = 1) As Byte '×Ö½ÚµÄ×óÒÆº¯Êý 'INPUT----------------------------- 'Byt Ô´²Ù×÷Êý 'BitsNum ÒÆÎ»µÄλÊý 'OUTPUT---------------------------- '·µ»ØÖµ ÒÆÎ»½á¹û 'last updated by Liu Qi 2004-3-23 Dim i&
For i = 1 To BitsNum Byt = ShLB_By1Bit(Byt) Next i
ShLB = Byt
End Function
Public Function ShRB(ByVal Byt As Byte, Optional ByVal BitsNum As Long = 1) As Byte '×Ö½ÚµÄÓÒÒÆº¯Êý 'INPUT----------------------------- 'Byt Ô´²Ù×÷Êý 'BitsNum ÒÆÎ»µÄλÊý 'OUTPUT---------------------------- '·µ»ØÖµ ÒÆÎ»½á¹û 'last updated by Liu Qi 2004-3-23 Dim i&
For i = 1 To BitsNum Byt = ShRB_By1Bit(Byt) Next i
ShRB = Byt
End Function
Private Function ShLB_By1Bit(ByVal Byt As Byte) As Byte '°Ñ×Ö½Ú×óÒÆÒ»Î»µÄº¯Êý,Ϊ ShlB ·þÎñ. 'INPUT----------------------------- 'Byt Ô´²Ù×÷Êý 'OUTPUT---------------------------- '·µ»ØÖµ ÒÆÎ»½á¹û 'last updated by Liu Qi 2004-3-23
'(Byt And &H7F): ÆÁ±Î×î¸ßλ. *2:×óÒÆÒ»Î» ShLB_By1Bit = (Byt And &H7F) * 2
'ShlB_By1Bit = Byt * 2'Òç³ö²âÊÔ
End Function Private Function ShRB_By1Bit(ByVal Byt As Byte) As Byte '°Ñ×Ö½ÚÓÒÒÆÒ»Î»µÄº¯Êý,Ϊ ShrB ·þÎñ. 'INPUT----------------------------- 'Byt Ô´²Ù×÷Êý 'OUTPUT---------------------------- '·µ»ØÖµ ÒÆÎ»½á¹û 'last updated by Liu Qi 2004-3-24
'/2:ÓÒÒÆÒ»Î» ShRB_By1Bit = Fix(Byt / 2)
End Function
Public Function ShLW(ByVal Word As Integer, Optional ByVal BitsNum As Long = 1) As Integer '×ÖµÄ×óÒÆº¯Êý 'INPUT------------------------------- 'Word Ô´²Ù×÷Êý 'BitsNum ÒÆÎ»µÄλÊý 'OUTPUT------------------------------ '·µ»ØÖµ ÒÆÎ»½á¹û 'last updated by Liu Qi 2004-3-24 Dim i&
For i = 1 To BitsNum Word = ShLW_By1Bit(Word) Next i
ShLW = Word
End Function
Public Function ShRW(ByVal Word As Integer, Optional ByVal BitsNum As Long = 1) As Integer '×ÖµÄÓÒÒÆº¯Êý 'INPUT------------------------------- 'Word Ô´²Ù×÷Êý 'BitsNum ÒÆÎ»µÄλÊý 'OUTPUT------------------------------ '·µ»ØÖµ ÒÆÎ»½á¹û 'last updated by Liu Qi 2004-3-24 Dim i&
For i = 1 To BitsNum Word = ShRW_By1Bit(Word) Next i
ShRW = Word End Function Private Function ShLW_By1Bit(ByVal Word As Integer) As Integer '°ÑÒ»¸ö×Ö×óÒÆÒ»Î»µÄº¯Êý 'INPUT------------------------------- 'Word Ô´²Ù×÷Êý 'OUTPUT------------------------------ '·µ»ØÖµ ÒÆÎ»½á¹û 'last updated by Liu Qi 2004-3-24 Dim HiByte As Byte, LoByte As Byte
'°Ñ×Ö²ð·ÖΪ×Ö½Ú HiByte = Hi(Word): LoByte = Lo(Word) '°Ñ¸ß×Ö½Ú×óÒÆÒ»Î»,±£Ö¤°ÑµÍ×Ö½ÚµÄ×î¸ßÎ»ÒÆÈë¸ß×Ö½ÚµÄ×îµÍλ HiByte = ShLB_By1Bit(HiByte) Or IIf((LoByte And &H80) = &H80, &H1, &H0) LoByte = ShLB_By1Bit(LoByte) 'µÍ×Ö½Ú×óÒÆÒ»Î» '°ÑÒÆÎ»ºóµÄ×Ö½ÚÔÙÖØÐÂ×éºÏ³É×Ö ShLW_By1Bit = Con(HiByte, LoByte)
End Function
Private Function ShRW_By1Bit(ByVal Word As Integer) As Integer '°ÑÒ»¸ö×ÖÓÒÒÆÒ»Î»µÄº¯Êý 'INPUT------------------------------- 'Word Ô´²Ù×÷Êý 'OUTPUT------------------------------ '·µ»ØÖµ ÒÆÎ»½á¹û 'last updated by Liu Qi 2004-3-27 Dim HiByte As Byte, LoByte As Byte
'°Ñ×Ö²ð·ÖΪ×Ö½Ú HiByte = Hi(Word): LoByte = Lo(Word)
'µÍ×Ö½ÚÓÒÒÆÒ»Î»,±£Ö¤°Ñ¸ß×Ö½ÚµÄ×îµÍÎ»ÒÆÈëµÍ×Ö½ÚµÄ×î¸ßλ LoByte = ShRB_By1Bit(LoByte) Or IIf((HiByte And &H1) = &H1, &H80, &H0)
'°Ñ¸ß×Ö½ÚÓÒÒÆÒ»Î», HiByte = ShRB_By1Bit(HiByte)
'°ÑÒÆÎ»ºóµÄ×Ö½ÚÔÙÖØÐÂ×éºÏ³É×Ö ShRW_By1Bit = Con(HiByte, LoByte)
End Function
Public Function ShLD(ByVal DWord As Long, Optional ByVal BitsNum As Long = 1) As Long '°ÑÒ»¸öË«×Ö×óÒÆµÄº¯Êý 'INPUT------------------------------- 'DWord Ô´²Ù×÷Êý 'BitsNum ÒÆÎ»µÄλÊý 'OUTPUT------------------------------ '·µ»ØÖµ ÒÆÎ»½á¹û 'last updated by Liu Qi 2004-3-28 Dim i&
For i = 1 To BitsNum DWord = ShLD_By1Bit(DWord) Next i
ShLD = DWord
End Function
Public Function ShRD(ByVal DWord As Long, Optional ByVal BitsNum As Long = 1) As Long '°ÑÒ»¸öË«×ÖÓÒÒÆµÄº¯Êý 'INPUT------------------------------- 'DWord Ô´²Ù×÷Êý 'BitsNum ÒÆÎ»µÄλÊý 'OUTPUT------------------------------ '·µ»ØÖµ ÒÆÎ»½á¹û 'last updated by Liu Qi 2004-3-28 Dim i&
For i = 1 To BitsNum DWord = ShRD_By1Bit(DWord) Next i
ShRD = DWord End Function Public Function ShLD_By1Bit(ByVal DWord As Long) As Long '°ÑÒ»¸öË«×Ö×óÒÆÒ»Î»µÄº¯Êý£¬Îª ShlD() ·þÎñ 'INPUT------------------------------- 'DWord Ô´²Ù×÷Êý 'OUTPUT------------------------------ '·µ»ØÖµ ÒÆÎ»½á¹û 'last updated by Liu Qi 2004-3-29 Dim iHiWord%, iLoWord%
'°ÑË«×Ö²ð·ÖΪÁ½¸öµ¥×Ö iHiWord = HiWord(DWord): iLoWord = LoWord(DWord)
'¸ßλ×Ö×óÒÆÒ»Î»,Òª°ÑµÍλ×ÖµÄ×î¸ßÎ»ÒÆµ½¸ßλ×ÖµÄ×îµÍλ iHiWord = ShLW_By1Bit(iHiWord) Or IIf((iLoWord And &H8000) = &H8000, &H1, &H0)
'µÍλ×Ö×óÒÆÒ»Î» iLoWord = ShLW_By1Bit(iLoWord)
ShLD_By1Bit = ConWord(iHiWord, iLoWord) 'ÖØÐÂÁ¬½Ó³ÉË«×Ö·µ»Ø½á¹û
End Function
Public Function ShRD_By1Bit(ByVal DWord As Long) As Long '°ÑÒ»¸öË«×ÖÓÒÒÆÒ»Î»µÄº¯Êý,Ϊ ShrD() ·þÎñ 'INPUT------------------------------- 'DWord Ô´²Ù×÷Êý 'OUTPUT------------------------------ '·µ»ØÖµ ÒÆÎ»½á¹û 'last updated by Liu Qi 2004-3-29 Dim iHiWord%, iLoWord%
'°ÑË«×Ö²ð·ÖΪÁ½¸öµ¥×Ö iHiWord = HiWord(DWord): iLoWord = LoWord(DWord)
'°ÑµÍλ×ÖÓÒÒÆÒ»Î»£¬Òª°Ñ¸ßλ×ÖµÄ×îµÍÎ»ÒÆµ½µÍλ×ÖµÄ×î¸ßλ iLoWord = ShRW_By1Bit(iLoWord) Or IIf((iHiWord And &H1) = &H1, &H8000, &H0)
'°Ñ¸ßλ×ÖÓÒÒÆÒ»Î» iHiWord = ShRW_By1Bit(iHiWord)
ShRD_By1Bit = ConWord(iHiWord, iLoWord) 'ÖØÐÂÁ¬½Ó³ÉË«×Ö·µ»Ø½á¹û
End Function
Public Function ShLB_C_By1Bit(ByVal Byt As Byte) As Byte '°Ñ×Ö½Ú<<Ñ»·>>×óÒÆÒ»Î»µÄº¯Êý.C ±íʾ Cycle,Ñ»· 'INPUT----------------------------- 'Byt :Ô´²Ù×÷Êý 'OUTPUT---------------------------- '·µ»ØÖµ : ÒÆÎ»½á¹û 'last updated by Liu Qi 2004-8-8
'(Byt And &H7F): ÆÁ±Î×î¸ßλ. *2:×óÒÆÒ»Î» ShLB_C_By1Bit = ((Byt And &H7F) * 2) Or IIf((Byt And &H80) = &H80, &H1, &H0) End Function
Public Function ShRB_C_By1Bit(ByVal Byt As Byte) As Byte '°Ñ×Ö½Ú<<Ñ»·>>ÓÒÒÆÒ»Î»µÄº¯Êý¡£ 'INPUT----------------------------- 'Byt :Ô´²Ù×÷Êý 'OUTPUT---------------------------- '·µ»ØÖµ : ÒÆÎ»½á¹û 'last updated by Liu Qi 2004-8-8
'(Byt And &H7F): ÆÁ±Î×î¸ßλ. *2:×óÒÆÒ»Î» ShRB_C_By1Bit = Fix(Byt / 2) Or IIf((Byt And &H1) = &H1, &H80, &H0) End Function
Public Function U2F(ByVal UnsignedLong As Long) As Double '°ÑÒ»¸ö³¤ÕûÐΰ´ÕÕÎÞ·ûºÅÊýת»¯³ÉÒ»¸ö¸¡µãÊýÖµ If (UnsignedLong And &H80000000) = &H80000000 Then 'Èç¹û×î¸ß루·ûºÅλ£©Îª1£¬ 'Ôò°ÑËüµÄÆÁ±Î·ûºÅλºóµÄÖµ¼ÓÉÏ×î¸ßλÎÞ·ûºÅ±íʾ·¨µÄȨֵ(ȨֵУÕý) U2F = (UnsignedLong And &H7FFFFFFF) + 2 ^ 31 Else 'Èç¹û×î¸ßλΪ 0£¬Ôò²»ÐèÌØÊâ´¦Àí U2F = UnsignedLong End If End Function
Public Function F2U(ByVal Float As Double) As Long '°ÑÒ»¸ö¸¡µãÊýÖµ°´ÕÕÎÞ·ûºÅÊýת»¯³ÉÒ»¸ö³¤ÕûÐÎ If Float > 2 ^ 32 - 1 Or Float < 0 Then 'ÎÞ·ûºÅÊý²»ÄÜÈÝÄɵÄÖµ Err.Raise 6 'Òý·¢Òç³ö´íÎó ElseIf Float > &H7FFFFFFF Then '×î¸ßλΪ1,ÔòÏÈÆÁ±Î×î¸ßλÒÔ˳ÀûÍê³ÉÏòÕûÐεÄת»¯£¬×îºóÔÙ°Ñ×î¸ßλµÄ1ÌíÉÏ F2U = CLng(Float - 2 ^ 31) Or &H80000000 Else 'Èç¹û×î¸ßλΪ 0£¬Ôò²»ÐèÌØÊâ´¦Àí F2U = Float End If End Function
Public Function UAdd(ByVal UnsignedLong1 As Long, ByVal UnsignedLong2 As Long) As Long '°ÑVBÖеij¤ÕûÐΰ´ÕÕÎÞ·ûºÅ¼Ó·¨Ïà¼Ó UAdd = F2U(U2F(UnsignedLong1) + U2F(UnsignedLong2)) End Function
Public Function UDif(ByVal UnsignedLong1 As Long, ByVal UnsignedLong2 As Long) As Long '°ÑVBÖеij¤ÕûÐΰ´ÕÕÎÞ·ûºÅ¼õ·¨Ïà¼õ UDif = F2U(U2F(UnsignedLong1) - U2F(UnsignedLong2)) End Function -----------------------------------------------------------------
-------------------------------FastBit.Bas-----------------------
Option Explicit
'----------------------------------------------------- 'Õâ¸öÄ£¿éʹÓð²È«Êý×é¼¼ÊõʵÏÖÁËÒÔÏÂÁù¸öº¯ÊýµÄFast°æ±¾£º 'Hi(),Lo(),HiWord(),LoWord(),Con(),ConWord() '¾ÊÔÑ飬Fast°æ±¾µÄº¯ÊýÐÔÄÜÌá¸ß1±¶ÒÔÉÏ '-----------------------------------------------------
'×÷ÕߣºÁõçù £¬2005-1-11 '¸öÈËÖ÷Ò³£ºhttp://LQweb.crcoo.com 'e-Mail£ºliuqi5521@hotmail.com
Private Type SafeArray1d '1άÊý×éµÄ SafeArray ¶¨Òå cDims As Integer 'άÊý fFeatures As Integer '±êÖ¾ cbElements As Long 'µ¥¸öÔªËØµÄ×Ö½ÚÊý clocks As Long 'Ëø¶¨¼ÆÊý pvData As Long 'Ö¸ÏòÊý×éÔªËØµÄÖ¸Õë cElements As Long 'ά¶¨Ò壬¸ÃάµÄÔªËØ¸öÊý Lbound As Long '¸ÃάµÄϽç End Type Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Sub ZeroMemory Lib "KERNEL32" Alias "RtlZeroMemory" (dest As Any, ByVal numBytes As Long)
Private Declare Function VarPtrArray Lib "msvbvm60.dll" _ Alias "VarPtr" (ptr() As Any) As Long Const FADF_AUTO = &H1 Const FADF_FIXEDSIZE = &H10
Private m_lSharedLong As Long 'Òª±»¹²ÏíµÄ³¤ÕûÐαäÁ¿ Private m_aiIntsInLong() As Integer 'Òª¹²Ïí³¤ÕûÐαäÁ¿µÄµØÖ·¿Õ¼äµÄÕûÐÎÊý×é Private m_SA1D_IntArr As SafeArray1d 'ÕûÐÎÊý×éµÄSafeArray½á¹¹
Private m_iSharedInt As Integer 'Òª±»¹²ÏíµÄÕûÐαäÁ¿ Private m_aBytesInInt() As Byte 'Òª¹²ÏíÕûÐαäÁ¿µÄµØÖ·¿Õ¼äµÄ×Ö½ÚÊý×é Private m_SA1D_ByteArr As SafeArray1d '×Ö½ÚÊý×éµÄSafeArray½á¹¹
'λ²Ù×÷ǰ³õʹ»¯¶¯×÷,Ö÷ÒªÊdzõʹ»¯£¬Èç¹û²»½øÐгõʹ»¯£¬½«»á³öÏÖ²»¿ÉÔ¤¼Æ´íÎó Public Sub BitOperatorInit()
With m_SA1D_IntArr .cDims = 1 'άÊý£º1ά .fFeatures = 17 '±êÖ¾£ºAuto or FixedSize .cbElements = 2 'ÔªËØ´óС£º2¸ö×Ö½Ú .clocks = 0 .pvData = VarPtr(m_lSharedLong) 'ʹÊý×éµÄÊý¾ÝÖ¸ÕëÖ¸Ïò³¤ÕûÐαäÁ¿m_lSharedLong .cElements = 2 'ÔªËØ¸öÊý£º2¸ö .Lbound = 0 'Ͻ磺0 End With
'ʹÊý×é±äÁ¿m_aiIntsInLongÖ¸ÏòÎÒÃÇ×Ô¼º´´½¨µÄ SafeArray1d ½á¹¹ CopyMemory ByVal VarPtrArray(m_aiIntsInLong), VarPtr(m_SA1D_IntArr), 4
With m_SA1D_ByteArr .cDims = 1 'άÊý£º1ά .fFeatures = 17 '±êÖ¾£ºAuto or FixedSize .cbElements = 1 'ÔªËØ´óС£º1¸ö×Ö½Ú .clocks = 0 .pvData = VarPtr(m_iSharedInt) 'ʹÊý×éµÄÊý¾ÝÖ¸ÕëÖ¸ÏòÕûÐαäÁ¿m_iSharedInt .cElements = 2 'ÔªËØ¸öÊý£º2¸ö .Lbound = 0 'Ͻ磺0 End With
'ʹÊý×é±äÁ¿m_aBytesInIntÖ¸ÏòÎÒÃÇ×Ô¼º´´½¨µÄ SafeArray1d ½á¹¹ CopyMemory ByVal VarPtrArray(m_aBytesInInt), VarPtr(m_SA1D_ByteArr), 4
End Sub
Public Sub BitOperatorEnd() 'ÊÍ·Å×ÊÔ´£¬³ÌÐò½áÊøÇ°Ò»¶¨Òªµ÷ÓÃ
'°ÑÊý×é±äÁ¿m_aiIntsInLongÖ¸Ïò 0,¼È C ÓïÑÔÖÐµÄ NULL CopyMemory ByVal VarPtrArray(m_aiIntsInLong), 0&, 4 '°ÑÊý×é±äÁ¿m_aBytesInIntÖ¸Ïò 0,¼È C ÓïÑÔÖÐµÄ NULL CopyMemory ByVal VarPtrArray(m_aBytesInInt), 0&, 4
End Sub
'-----------------------ÏÂÃæÕâЩÀý³ÌʵÏÖÕûÐͱäÁ¿µÄ²ð·Ö£¬ºÏ²¢²Ù×÷,Fast°æ±¾------------- Public Function fastCon(ByVal HiByte As Byte, ByVal LoByte As Byte) As Integer '°ÑÁ½¸ö×Ö½Ú (Byte) Á¬³ÉÒ»¸ö×Ö £¨word£© 'INPUT-------------------------------------------------------------------- 'HiByte ²ÎÓëÁ¬½áµÄ¸ß×Ö½Ú 'LoByte ²ÎÓëÁ¬½áµÄµÍ×Ö½Ú 'OUTPUT------------------------------------------------------------------- '·µ»ØÖµ Á¬½áµÄ½á¹û 'Last updated by Liu Qi 2004-3-20.
m_aBytesInInt(1) = HiByte m_aBytesInInt(0) = LoByte
fastCon = m_iSharedInt
End Function
Public Function fastConWord(ByVal HiWord As Integer, ByVal LoWord As Integer) As Long '°ÑÁ½¸ö×Ö£¨Word£©Á¬³ÉÒ»¸öË«×Ö£¨DWord£© 'INPUT-------------------------------------------------------------------- 'HiWord ²ÎÓëÁ¬½áµÄ¸ßλ×Ö 'LoWord ²ÎÓëÁ¬½áµÄµÍλ×Ö 'OUTPUT------------------------------------------------------------------- '·µ»ØÖµ Á¬½áµÄ½á¹û 'Last updated by Liu Qi 2004-3-20.
m_aiIntsInLong(1) = HiWord m_aiIntsInLong(0) = LoWord
fastConWord = m_lSharedLong
End Function
Public Function fastHi(ByVal Word As Integer) As Byte 'ȡһ¸ö×Ö£¨Word£©µÄ¸ß×Ö½Ú£¨Byte£© 'INPUT------------------------------------------- 'Word ×Ö£¨Word£© 'OUTPUT------------------------------------------ '·µ»ØÖµ Word²ÎÊýµÄ¸ß×Ö½Ú 'Last updated by Liu Qi 2004-3-20. m_iSharedInt = Word fastHi = m_aBytesInInt(1)
End Function
Public Function fastLo(ByVal Word As Integer) As Byte 'ȡһ¸ö×Ö£¨Word£©µÄµÍ×Ö½Ú£¨Byte£© 'INPUT------------------------------------------- 'Word ×Ö£¨Word£© 'OUTPUT------------------------------------------ '·µ»ØÖµ Word²ÎÊýµÄµÍ×Ö½Ú 'Last updated by Liu Qi 2004-3-20.
m_iSharedInt = Word fastLo = m_aBytesInInt(0)
End Function
Public Function fastHiWord(ByVal DWord As Long) As Integer 'ȡһ¸öË«×Ö£¨DWord£©µÄ¸ßλ×Ö 'INPUT------------------------------------------- 'DWord Ë«×Ö 'OUTPUT------------------------------------------ '·µ»ØÖµ DWord²ÎÊýµÄ¸ßλ×Ö 'Last updated by Liu Qi 2004-3-20. m_lSharedLong = DWord fastHiWord = m_aiIntsInLong(1)
End Function
Public Function fastLoWord(ByVal DWord As Long) As Integer 'ȡһ¸öË«×Ö£¨DWord£©µÄµÍλ×Ö 'INPUT------------------------------------------- 'DWord Ë«×Ö 'OUTPUT------------------------------------------ '·µ»ØÖµ DWord²ÎÊýµÄµÍλ×Ö 'Last updated by Liu Qi 2004-3-20. m_lSharedLong = DWord fastLoWord = m_aiIntsInLong(0)
End Function
--------------------------------------------------------------
---------------------------modShiftBitByte.bas---------------]
Option Explicit
'ÕâÊÇΪ×Ö½ÚÀàÐͱäÁ¿Ìṩ¿ìËÙµÄÒÆÎ»²Ù×÷µÄÄ£¿é£¬¿ÉÒÔʹÓñ¾Ä£¿éÖеĿì±íʵÏÖ¸ßËÙµÄÒÆÎ»ÔËËã 'ÕâÊÇ´¿VBʵÏֵ쬲»ÐèÒªÈκÎDLL
'ÐèÒª BitEx.Bas
'Áõçù£¬×÷ÓÚ2005-1-26
Const MAX_BYTE = &HFF&
'ÏÂÃæÊÇÒÆÎ»±í Public g_aShLB() As Byte '×Ö½Ú×óÒÆµÄ¿ì±í£¬µÚ1άÊÇ´ýÒÆÎ»µÄ×Ö½Ú£¬µÚ2άÊÇÒÆÎ»Î»Êý Public g_aShRB() As Byte '×Ö½ÚÓÒÒÆµÄ¿ì±í£¬µÚ1άÊÇ´ýÒÆÎ»µÄ×Ö½Ú£¬µÚ2άÊÇÒÆÎ»Î»Êý '------------------------------------------------------------------------------------
Public Function IsInitialized() As Boolean 'ÅжÏÊÇ·ñÒѾ³õʼ»¯¹ýÒÆÎ»±íµÄº¯Êý
On Error GoTo hanlder
g_aShLB(1, 1) = g_aShLB(1, 1) IsInitialized = True 'û³ö´í£¬ËµÃ÷³õʼ»¯¹ýÁË Exit Function
hanlder: IsInitialized = False '³ö´í˵Ã÷»¹Ã»Óгõʼ»¯ End Function
Public Sub ShiftBitByteInit() '³õʼ»¯ÒÆÎ»±í
If IsInitialized Then Exit Sub ' Èç¹ûÒѾ³õʼ»¯¹ýÁË£¬²»±ØÔÙ³õʼ»¯ÁË
'·ÖÅä¿Õ¼ä ReDim g_aShLB(0 To MAX_BYTE, 1 To 7) As Byte '×óÒÆ±í ReDim g_aShRB(0 To MAX_BYTE, 1 To 7) As Byte 'ÓÒÒÆ±í
Dim i As Long, j As Long
For i = 0 To MAX_BYTE For j = 1 To 7 g_aShLB(i, j) = ShLB(i, j) g_aShRB(i, j) = ShRB(i, j) Next j Next i End Sub
Public Sub DestoryShiftBitByteTable() 'Ïú»Ù×Ö½ÚÀàÐ͵ÄÒÆÎ»±í£¬ÒÔÊÍ·ÅÄÚ´æ ReDim g_aShLB(0) Erase g_aShLB
ReDim g_aShRB(0) Erase g_aShRB
End Sub -------------------------------------------------------
---------------------------SafeArray.bas--------------------------
'*************************************************************** ' (c) Copyright 2000 Matthew J. Curland ' ' This file is from the CD-ROM accompanying the book: ' Advanced Visual Basic 6: Power Techniques for Everyday Programs ' Author: Matthew Curland ' Published by: Addison-Wesley, July 2000 ' ISBN: 0-201-70712-8 ' http://www.PowerVB.com ' ' You are entitled to license free distribution of any application ' that uses this file if you own a copy of the book, or if you ' have obtained the file from a source approved by the author. You ' may redistribute this file only with express written permission ' of the author. ' ' This file depends on: ' References:£¨²»ÔÙÐèÒªVBoostTypes6.olb£¬¿ÉÖ±½ÓÔÚÈκεط½Ê¹Óã© ' VBoostTypes6.olb (VBoost Object Types (6.0))' ' Files: ' None ' Minimal VBoost conditionals: ' None ' Conditional Compilation Values: ' None ' ' This file is discussed in Chapter 2. '***************************************************************
'*************************************************************** '˵Ã÷£ºÕâ¸öÄ£¿éÊÇ Matthew J. Curland µÄ×÷Æ·£¬ÎÒ¸ù¾Ý×Ô¼ºµÄʵ¼ÊÐèÒª '×÷ÁËһЩ΢СµÄ¸Ä¶¯£¨²»ÔÙÐèÒªVBoostTypes6.olb£¬¿ÉÖ±½ÓÔÚÈκεط½Ê¹Óã© '£¬Ìí¼ÓÁËÖÐÎĵÄ×¢ÊÍ¡£ ' 'ʹÓÃÕâ¸öÄ£¿é£¬¿ÉÒÔÏñ C ÓïÑÔÒ»ÑùÓÃÊý×é·ÃÎÊÈÎÒâµÄÄÚ´æÎ»ÖÃ
'×÷ÕߣºÁõçù £¬2005-1-11 '¸öÈËÖ÷Ò³£ºhttp://LQweb.crcoo.com 'e-Mail£ºliuqi5521@hotmail.com '*************************************************************** Option Explicit
Public Type SafeArray1d '1άÊý×éµÄ SafeArray ¶¨Òå cDims As Integer 'άÊý fFeatures As Integer '±êÖ¾ cbElements As Long 'µ¥¸öÔªËØµÄ×Ö½ÚÊý clocks As Long 'Ëø¶¨¼ÆÊý pvData As Long 'Ö¸ÏòÊý×éÔªËØµÄÖ¸Õë cElements As Long 'ά¶¨Ò壬¸ÃάµÄÔªËØ¸öÊý Lbound As Long '¸ÃάµÄϽç End Type
Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Private Declare Sub ZeroMemory Lib "KERNEL32" Alias "RtlZeroMemory" (dest As Any, ByVal numBytes As Long)
Public Declare Function VarPtrArray Lib "msvbvm60.dll" _ Alias "VarPtr" (ptr() As Any) As Long Public Const FADF_AUTO = &H1 Public Const FADF_FIXEDSIZE = &H10
Public Sub ShareMemoryViaArray(ByVal ArrayPtr As Long, _ ByVal MemPtr As Long, SA1D As SafeArray1d, _ ByVal ElemByteLen As Long, ByVal ElemCount As Long) 'INPUT--------------------------------------------------------------------- 'ByVal ArrayPtr As Long Ö¸ÏòÊý×é±äÁ¿µÄÖ¸Õ룬Óà VarPtrArray(Êý×éÃû)»ñÈ¡ 'ByVal MemPtr As Long Ö¸ÏòÒª½èÓõÄÄÚ´æ¿éµÄÖ¸Õë(¾ÍÊÇÆðʼµØÖ·)¡£ 'SA1D As SafeArray1d ͨ¹ýÒýÓô«µÝÀ´µÄSafeArray1d½á¹¹±äÁ¿ 'ByVal ElemByteLen As Long Ö¸³öÊý×éҪʹÓõÄÔªËØ´óС 'ByVal ElemCount As Long Ö¸³öÊý×éҪʹÓõÄÔªËØ¸öÊý ' 'OUTPUT-------------------------------------------------------------------- 'N/A 'ǰÌõ¼þ-------------------------------------------------------------------- 'ÒªÇóÊý×é±äÁ¿±ØÐëÊÇδ·ÖÅäµÄ 'ºóÌõ¼þ-------------------------------------------------------------------- 'N/A With SA1D 'cbElements is optional because this is a 1 element array, 'so cbElements is not needed to walk the array. If Erase 'is called on an array with .cbElements = 0, VB will still 'free all pointer types, but non-pointer types will not get 'zeroed out. Note that the compiler calculates the length 'of a structure at compile time, so LenB(MyStruct(0)) is 'valid regardless of whether or not MyStruct is actually allocated. .cbElements = ElemByteLen 'ÔªËØ´óС .cDims = 1 'άÊý 'This means that if the 'array goes out of scope, then the pointed 'to memory will be cleaned, but no attempt 'will be made to free the array pointer 'or descriptor. .fFeatures = FADF_AUTO Or FADF_FIXEDSIZE 'ÌØÕ÷ .pvData = MemPtr 'Ö¸ÏòÒª½èÓõÄÄÚ´æ¿é .cElements = ElemCount 'ÔªËØ¸öÊý .Lbound = 0 ' Ͻç End With '°Ñ SafeArray ½á¹¹µÄÊ×µØÖ·¸³¸øÊý×é±äÁ¿ CopyMemory ByVal ArrayPtr, VarPtr(SA1D), 4 End Sub
Public Sub UnshareMemory(ByVal ArrayPtr As Long) 'INPUT--------------------------------------------------------------------- 'ByVal ArrayPtr As Long Ö¸ÏòÊý×é±äÁ¿µÄÖ¸Õ룬Óà VarPtrArray(Êý×éÃû)»ñÈ¡ ' 'OUTPUT-------------------------------------------------------------------- 'N/A 'ǰÌõ¼þ-------------------------------------------------------------------- 'ÒªÇóÊý×é±äÁ¿±ØÐëÊÇÓÃShareMemoryViaArray·ÖÅäµÄ£¬²»ÄÜÓÃÓÚVB·ÖÅäµÄÊý×é 'ºóÌõ¼þ-------------------------------------------------------------------- 'N/A ''°ÑÊý×é±äÁ¿µÄÖµÖÃΪ0 ZeroMemory ByVal ArrayPtr, 4 End Sub
------------------------------------------------------------------
------------------------------ ShiftBitInt16.bas -----------------
Option Explicit
'ÕâÊÇΪIntegerÀàÐͱäÁ¿Ìṩ³¬¸ßËÙÒÆÎ»ÔËËãµÄÄ£¿é£¬ÓÉÓÚIntegerÀàÐ͵ķ¶Î§½Ï´ó£¬±È½ÏÕ¼Äڴ棬ËùÒÔ 'ÓõÄÊǶ¯Ì¬±í£¬ÓÃʱ·ÖÅ䣬ÓÃÍê¿ÉÒÔ¾¡¿ìÏú»Ù¡££¨»¹ÓиöºÃ´¦£¬¿ÉÒÔ±ÜÃâÍü¼Ç³õʼ»¯Êý×飩
'ÕâÊÇ´¿VB°æµÄ£¬ÓëÔÀ´ÄǸöÐèÒªDLLµÄ°æ±¾Ïà±È£¬Ê¹Óøü·½±ã¡£
'Áõçù£¬×÷ÓÚ2005-1-26
'ÐèÒª£ºBitEx10.Bas SafeArray.Bas modShiftBitByte.Bas
'ÁíÍ⣺ʹÓÃÕâÁ½¸ö¿ì±íÒ»¶¨Òª×¢ÒâÒ»µã£¬Òª×öÒ»¸ö³¤ÕûÐÎÎÞ·ûºÅÀ©Õ¹Ö®ºóÔÙ²é±í£¬²»È»»á³ö´í£¬ÏñÕâÑù£º 'g_aShL16(SomeInt and &HFFFF&,1) 'Ϊʲô£¿¶Ô×î¸ßλΪ1µÄInteger,VB»á°ÑËü½âÊÍΪһ¸ö¸ºÖµ,×öÁ˳¤ÕûÐÎÀ©Õ¹£¬VB²Å»á°ÑËüÀí½âΪһ¸öÕýÖµ, 'ÓÉÓÚÊý×éÎÞ·¨½ÓÊܸºÖµË÷Òý£¬ËùÒÔÎÒÃÇÊÇÓÃIntegerµÄÎÞ·ûºÅÖµÀ´Ôì±í 'ËùÒÔ˵£¬²é±íµÄʱºòµ±È»ÒªÓÃIntegerµÄÎÞ·ûºÅÖµÀ´²é±í
'ÕûÐαäÁ¿µÄÒÆÎ»±í---------------------------------------------------------------------------------------- Public g_aShL16() As Integer Public g_aShR16() As Integer '--------------------------------------------------------------------------------------------------------
Public Const MAX_UINT16 = &HFFFF& 'max unsigned int16,×¢Ò⣺ÕâÊÇÒ»¸öÓÃLong´æ´¢µÄ65535,ÎÞ·ûºÅ×ÖµÄ×î´óÖµ
Private m_iSharedInt As Integer 'µØÖ·¿Õ¼äÒª±»¹²ÏíµÄ³¤ÕûÐÎ Private m_aBytesInInt() As Byte 'Òª¹²Ïí³¤ÕûÐεØÖ·¿Õ¼äµÄ×Ö½ÚÊý×é Private m_SA1D As SafeArray1d '°²È«Êý×é½á¹¹
Public Sub InitShL16Table() '³õʼ»¯×óÒÆ±í£¬£¨ÎªÉ¶ºÍÓÒÒÆ±í·Ö¿ªÄØ£¿°´Ðè·ÖÅ䣬ʡÄڴ棬ÐèÒªÄĸö·ÖÅäÄĸö¡££© Dim i As Long, j As Long
If ShiftLeftTableIsInitialized Then Exit Sub 'Èç¹û×óÒÆ±íÒѾ³õʼ»¯¹ýÁË£¬¾ÍÍ˳ö
ShiftBitByteInit '³õʼ»¯×Ö½ÚÀàÐ͵ÄÒÆÎ»±í modSafeArray.ShareMemoryViaArray VarPtrArray(m_aBytesInInt), VarPtr(m_iSharedInt), m_SA1D, _ 1, 2 '¹²ÏíÄÚ´æ If VarPtr(m_iSharedInt) <> VarPtr(m_aBytesInInt(0)) Then MsgBox "¹²ÏíÄÚ´æÊ§°Ü!"
ReDim g_aShL16(0 To MAX_UINT16, 1 To 15) 'ÎªÒÆÎ»±í·ÖÅä¿Õ¼ä£¬0-ffff,1-15 For i = 0 To MAX_UINT16 For j = 1 To 15 g_aShL16(i, j) = ShL16_Internal(LoWord(i), j) Next j Next i
UnshareMemory VarPtrArray(m_aBytesInInt) 'È¡Ïû¹²ÏíµÄÄÚ´æ End Sub
Public Sub DestroyShL16Table() 'Ïú»Ù×óÒÆ±í£¬ÊÍ·ÅÄÚ´æ ReDim g_aShL16(0) Erase g_aShL16 End Sub
Public Sub InitShR16Table() '³õʼ»¯ÓÒÒÆ±í Dim i As Long, j As Long
If ShiftRightTableIsInitialized Then Exit Sub 'Èç¹ûÓÒÒÆ±íÒѾ³õʼ»¯¹ýÁË£¬ÄÇôÍ˳ö
ShiftBitByteInit '³õʼ»¯×Ö½ÚÀàÐ͵ÄÒÆÎ»±í modSafeArray.ShareMemoryViaArray VarPtrArray(m_aBytesInInt), VarPtr(m_iSharedInt), m_SA1D, _ 1, 2 '¹²ÏíÄÚ´æ If VarPtr(m_iSharedInt) <> VarPtr(m_aBytesInInt(0)) Then MsgBox "¹²ÏíÄÚ´æÊ§°Ü!"
ReDim g_aShR16(0 To MAX_UINT16, 1 To 15) 'ÎªÒÆÎ»±í·ÖÅä¿Õ¼ä£¬0-ffff,1-15 For i = 0 To MAX_UINT16 For j = 1 To 15 g_aShR16(i, j) = ShR16_Internal(LoWord(i), j) Next j Next i
UnshareMemory VarPtrArray(m_aBytesInInt) 'È¡Ïû¹²ÏíµÄÄÚ´æ End Sub
Public Sub DestroyShR16Table() 'Ïú»ÙÓÒÒÆ±í£¬ÊÍ·ÅÄÚ´æ ReDim g_aShR16(0) Erase g_aShR16 End Sub
Public Function ShL16_Internal(ByVal Word As Integer, Optional ByVal BitNum As Long = 1) As Integer '×ÖµÄ×óÒÆº¯Êý£¬ËÙ¶ÈÒ»°ã,½ö¹©ÄÚ²¿Ê¹ÓÃ,ÓÃÀ´³õʼ»¯ÒÆÎ»±í»¹¿ÉÒÔ£¬ÓÃÔÚʵ¼ÊÔËËãÖоͺÁÎÞÓÅÊÆ¿ÉÑÔÁË¡£ 'INPUT------------------------------- 'Word Ô´²Ù×÷Êý 'BitsNum ÒÆÎ»µÄλÊý 'OUTPUT------------------------------ '·µ»ØÖµ ÒÆÎ»½á¹û
m_iSharedInt = Word '°Ñ´ýÒÆÎ»µÄÖµ¸³¸ø±»¹²ÏíµÄÕûÐÎ
If BitNum = 8 Then 'Èç¹ûµÈÓÚ8£¬Ö±½Ó°ÑµÍ×Ö½Ú°áµ½¸ß×Ö½ÚÈ¥¾ÍOKÁË m_aBytesInInt(1) = m_aBytesInInt(0) m_aBytesInInt(0) = 0 ElseIf BitNum > 8 Then 'Èç¹û´óÓÚ8£¬ÄÇô¾ÍÏÈÒÆ8룬ÔÙÒÆÊ£Ï嵀 m_aBytesInInt(1) = m_aBytesInInt(0) m_aBytesInInt(0) = 0 m_aBytesInInt(1) = g_aShLB(m_aBytesInInt(1), BitNum - 8) Else 'СÓÚ8
'°Ñ¸ß×Ö½Ú×óÒÆ£¬²¢°ÑµÍ×Ö½ÚÏàÓ¦µÄÎ»ÒÆµ½¸ß×Ö½ÚÉÏ m_aBytesInInt(1) = g_aShLB(m_aBytesInInt(1), BitNum) Or g_aShRB(m_aBytesInInt(0), 8 - BitNum) 'µÍ×Ö½Ú×óÒÆ m_aBytesInInt(0) = g_aShLB(m_aBytesInInt(0), BitNum)
End If
'·µ»Ø½á¹û ShL16_Internal = m_iSharedInt
End Function Private Function ShR16_Internal(ByVal Word As Integer, Optional ByVal BitNum As Long = 1) As Integer '×ÖµÄÓÒÒÆº¯Êý,½ö¹©ÄÚ²¿Ê¹Óà 'INPUT------------------------------- 'Word Ô´²Ù×÷Êý 'BitsNum ÒÆÎ»µÄλÊý 'OUTPUT------------------------------ '·µ»ØÖµ ÒÆÎ»½á¹û m_iSharedInt = Word '°Ñ´ýÒÆÎ»µÄÖµ¸³¸ø±»¹²ÏíµÄÕûÐÎ
If BitNum = 8 Then 'Èç¹ûÒÆÎ»Î»ÊýµÈÓÚ8£¬ÓÒÒÆ8λ¾ÍµÈ¼ÛÓÚÖ±½Ó°Ñ¸ß×Ö½Ú°áµ½µÍ×Ö½Ú,¸ß×Ö½ÚÇåÁã m_aBytesInInt(0) = m_aBytesInInt(1) m_aBytesInInt(1) = 0 ElseIf BitNum > 8 Then 'Èç¹ûÒÆÎ»Î»Êý´óÓÚ8£¬ÄÇôÏÈÓÒÒÆ8룬ÔڰѵÍ×Ö½ÚÓÒÒÆÊ£ÏµÄλÊý m_aBytesInInt(0) = m_aBytesInInt(1) m_aBytesInInt(1) = 0 m_aBytesInInt(0) = g_aShRB(m_aBytesInInt(0), BitNum - 8) Else 'СÓÚ8 'µÍ×Ö½ÚÓÒÒÆ£¬²¢°Ñ¸ß×Ö½ÚÏàÓ¦µÄÎ»ÒÆ¶¯µ½µÍ×Ö½Ú m_aBytesInInt(0) = g_aShRB(m_aBytesInInt(0), BitNum) Or g_aShLB(m_aBytesInInt(1), 8 - BitNum) '¸ß×Ö½ÚÓÒÒÆ m_aBytesInInt(1) = g_aShRB(m_aBytesInInt(1), BitNum) End If
ShR16_Internal = m_iSharedInt End Function
Private Function ShiftLeftTableIsInitialized() As Boolean 'ÅжÏ×óÒÆ±íÊÇ·ñÒѾ³õʼ»¯¹ýµÄº¯Êý£¬³õʼ»¯¹ý·µ»ØÕ棬ûÓгõʼ»¯·µ»Ø¼Ù
On Error GoTo handler
g_aShL16(1, 1) = g_aShL16(1, 1) ShiftLeftTableIsInitialized = True Exit Function
handler: ShiftLeftTableIsInitialized = False
End Function
Private Function ShiftRightTableIsInitialized() As Boolean 'ÅжÏÓÒÒÆ±íÊÇ·ñÒѾ³õʼ»¯¹ýµÄº¯Êý£¬³õʼ»¯¹ý·µ»ØÕ棬·ñÔò·µ»Ø¼Ù On Error GoTo handler
g_aShR16(1, 1) = g_aShR16(1, 1) ShiftRightTableIsInitialized = True Exit Function
handler: ShiftRightTableIsInitialized = False
End Function -----------------------------------------------------------------
|