ÕªÒª£º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 -----------------------------------------------------------------
|