2008年8月24日星期日

VB Flashbit

资源下载:
http://d.download.csdn.net/down/566609/KiteGirl

FlashBit是我最想写而又一直没时间写的一个程序,今天一鼓作气把它捣鼓出来了。
这是在VB下实现对Bit操作的一组实用函数,是个把Byte肢解成若干Bit来操作的玩意儿,说它变态一点不过分。
这个程序看起来似乎有点吃饱了撑的,但实际上它相当有用。写它的动机来自于以VB编写哈夫曼编码/解码器和单片机应用的一些需求。VB下对Bit操作相当不方便,连移位命令都没有。而利用算数方法实现一些对Bit的操作在速度上实在难以忍受,而且代码及其冗长复杂。就这个程序本身来说,如果用纯算数方法实现,速度至少慢10倍,我是用一种比较缺德的查表法来实现的(将近9MB大的一个表,非常变态)。
至于它能做什么?比较典型的用途是做BASE64编码/解码器、哈夫曼编码/解码器,或者把信息藏在一个BMP文件像素的0位面里(据说本·拉登先生曾用这个办法通过互联网传递信息)。单色位图、采集点阵字库、GIF编码也会用到它。

这个程序有Simple和Professional两种。功能、速度完全一样。两者区别是:
Simple没有真正的计算函数,纯粹是查表,不能自己生成FlashBit_BSL_Buffer.dat;
Professional有真正的计算函数,可以自己生成甚至不用这个文件,为了实现这个功能则多了一大堆你看了之后想撞墙的代码。但那些代码除了生成FlashBit_BSL_Buffer.dat文件,压根不实用(速度比查表法要慢许多)。
考虑到代码的简洁,上面提供下载的是Simple。如果你想要Professional也不是不可以,我会在稍后贴出来的。

下面是这个模块里所有方法、函数的说明:

BytesBit_BitsPutToBytes方法
格式:tClass.BytesBit_BitsGetByBytes pBytes(), pBitsLoacte, pBitsValue, pBitsCount[, pHL_Logic][, pBoundLock]
功能:在字符串数组指定位写入指定位长的位值。
参数:byte pBytes() 被写入的字节数组。
long pBitsLoacte 起始位。取值范围(0 To 2^31)。
long pBitsCount 写位长。取值范围(-8 to 8)。
pBitsCount > 0 从起始位向右读;
pBitsCount < 0 从起始位向左读;
pBitsCount = 0 无效(不写入)
Boolean pHL_Logic 可选参数。位序逻辑。默认为False。
=True 书写顺序。
=False 逻辑顺序。
Boolean pBoundLock 可选参数。字节数组下标锁定。默认为True。
=True 不锁定字节数组下标。
=False 锁定字节数组下标。
返回:byte tByte 位值。
说明:1、pBytes()必须是下标从0开始的至少有一个元素的数组,否则会出错。
2、pBitsLoacte从0开始计数,不能是负值。pBitsLoacte上限可以超出实际字节数组所具备的位数。
3、pBoundLock=False的情况下,如pBitsLoacte前后位数不足pBitsCount定义的位长,则作如下处理:
pBitsCount > 0 取从起始位到第0位之间的位长,截取pBitsValue高位写入。
pBitsCount < 0 取从起始位到第7位之间的位长,截取pBitsValue低位写入。
pBoundLock=True的情况下,pBitsLoacte后位数不足会扩展字节数组以容纳写入的位。
但pBitsCount < 0的情况下,如pBitsLoacte前的位数不足则截取pBitsValue低位写入。
4、pHL_Logic=True 将字节最左边的位作为0位,以符合书写顺序。
pHL_Logic=False 将字节最右边的位作为0位,以符合逻辑顺序。

BytesBit_BitsGetByBytes函数
格式:[tByte] = tClass.BytesBit_BitsGetByBytes(pBytes(), pBitsLoacte, pBitsCount[, pHL_Logic])
功能:从字符串数组指定位读取指定位长的位值。
参数:byte pBytes() 字节数组。
long pBitsLoacte 起始位。取值范围(0 To 2^31)。
long pBitsCount 取位长。取值范围(-8 to 8)。
pBitsCount > 0 从起始位向右读;
pBitsCount < 0 从起始位向左读;
pBitsCount = 0 无效(返回0)
Boolean pHL_Logic 可选参数。位序逻辑。默认为False。
=True 书写顺序。
=False 逻辑顺序。
返回:byte tByte 位值。
说明:1、pBytes()必须是下标从0开始的至少有一个元素的数组,否则会出错。
2、pBitsLoacte从0开始计数,不能是负值。pBitsLoacte上限可以超出实际字节数组所具备的位数,返回0。
3、如果pLocate前后位数不足pBitsCount定义的位长,则作如下处理:
pBitsCount > 0 取从起始位到第0位之间的位,并后后面补足够的0。
pBitsCount < 0 取从起始位到第7位的位值。
4、pHL_Logic=True 将字节最左边的位作为0位,以符合书写顺序。
pHL_Logic=False 将字节最右边的位作为0位,以符合逻辑顺序。

BinaryText_SetToBytes函数
格式:[tBytes()] = tClass.BinaryText_SetToBytes(pText[, pLimit])
功能:将八位二进制字符串文本解码为字节数组。
参数:string pText 八位二进制字符串文本。
string pLimit 可选参数。八位二进制字符串之间的分隔符,默认为" "。
返回:byte tBytes() 字节数组。

BinaryText_GetByBytes函数
格式:[tString] = tClass.BinaryText_GetByBytes(pBytes()[, pLimit])
功能:将字节数组编码为八位二进制字符串。
参数:byte pBytes() 字节数组。
string pLimit 可选参数。八位二进制字符串之间的分隔符,默认为" "。
返回:string tString 八位二进制字符串文本。

BinaryString_FormatCheck函数
格式:[tBool] = tClass.BinaryString_FormatCheck(pString)
功能:检测八位二进制字符串的合法性。
参数:string pString 字节值的八位二进制字符串。
返回:boolean tBool True - 合法; False - 非法

BinaryString_SetToByte函数
格式:[tByte] = tClass.BinaryString_GetByByte(pString)
功能:从八位二进制字符串取得字节值。
参数:string pString 字节值的八位二进制字符串。
返回:byte tByte 字节值。

BinaryString_GetByByte函数
格式:[tString] = tClass.BinaryString_GetByByte(pByte)
功能:取字节值的八位二进制字符串。
参数:byte pByte 字节值。
返回:string tString 字节值的八位二进制字符串。

BinaryBits_Put函数
格式:[tOutByte] = tClass.BinaryBits_Put(pByte, pLocate, pCount, pValue)
功能:将指定长度的位值写入字节指定位置。
参数:byte pByte 原始字节。
long pLocate 起始位。取值范围(7 to 0)。
long pCount 写位长。取值范围(-8 to 8)。
pCount > 0 从起始位向右写;
pCount < 0 从起始位向左写;
pCount = 0 无效
byte pValue 写位值。
返回:byte pByte 写值后的字节。
说明:1、这是BinaryBits_MathPut的缓冲版函数。
2、缓冲函数不对参数值范围做任何检测,取值范围外的参数值会导致程序崩溃。
3、pLocate对一个字节的8个位序的定义为Bit7,Bit6,Bit5,Bit4,Bit3,Bit2,Bit1,Bit0
4、如果pLocate前后位数不足pCount定义的位长,则作如下处理:
pCount > 0 取从起始位到第0位之间的位长,截取pValue高位写入。
pCount < 0 取从起始位到第7位之间的位长,截取pValue低位写入。
5、如果pValue的值超过pCount定义的位长,则按pCount定位的位长截取低位。

BinaryBits_Get函数
格式:[tOutByte] = tClass.BinaryBits_Get(pByte, pLocate, pCount)
功能:从字节指定位置取指定位长的位值。
参数:byte pByte 源Byte。
long pLocate 起始位。取值范围(7 to 0)。
long pCount 取位长。取值范围(-8 to 8)。
pCount > 0 从起始位向右取;
pCount < 0 从起始位向左取;
pCount = 0 无效(返回0)
返回:byte pByte 位值。
说明:1、这是BinaryBits_MathGet的缓冲版函数。
2、缓冲函数不对参数值范围做任何检测,取值范围外的参数值会导致程序崩溃。
3、pLocate对一个字节的8个位序的定义为Bit7,Bit6,Bit5,Bit4,Bit3,Bit2,Bit1,Bit0
4、如果pLocate前后位数不足pCount定义的位长,则作如下处理:
pCount > 0 取从起始位到第0位之间的位,并后后面补足够的0。
pCount < 0 取从起始位到第7位的位值。

BinaryBits_Move函数
格式:[tOutByte] = tClass.BinaryBits_Move(pByte, pStep, [pLoop])
功能:对Byte进行算数移位。
参数:byte pByte 源Byte。
long pStep 移位数量。取值范围(-7 to 7)
pStep < 0 右移位
pStep = 0 不移位
pStep > 0 左移位
boolean pLoop 循环移位开关。取值范围(0,1)默认为0。
pLoop = 0 不循环
pLoop = 1 循环
返回:byte tOutByte 移位后的Byte。
说明:1、这是BinaryBits_MathMove的缓冲版函数。
2、缓冲函数不对参数值范围做任何检测,取值范围外的参数值会导致程序崩溃。

没有评论: