vb将单精度转换为4个字符串

上传人:飞*** 文档编号:40191461 上传时间:2018-05-24 格式:DOC 页数:8 大小:39KB
返回 下载 相关 举报
vb将单精度转换为4个字符串_第1页
第1页 / 共8页
vb将单精度转换为4个字符串_第2页
第2页 / 共8页
vb将单精度转换为4个字符串_第3页
第3页 / 共8页
vb将单精度转换为4个字符串_第4页
第4页 / 共8页
vb将单精度转换为4个字符串_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《vb将单精度转换为4个字符串》由会员分享,可在线阅读,更多相关《vb将单精度转换为4个字符串(8页珍藏版)》请在金锄头文库上搜索。

1、Option ExplicitPrivate Declare Sub CopyMemory Lib “kernel32“ Alias “RtlMoveMemory“ (Destination As Any, Source As Any, ByVal Length As Long)Private Sub cmdSinHex_Click()Text3 = “Dim i As IntegerDim hexData As StringDim a As SingleDim Buffer(3) As Bytea = Val(Text1)CopyMemory Buffer(0), a, 4For i = 0

2、 To 3If Len(Hex(Buffer(i) = 1 ThenhexData = “0“ & Hex(Buffer(i) + hexDataElsehexData = Hex(Buffer(i) + hexDataEnd IfNextText2 = hexDataFor i = 1 To Len(hexData) Step 2Text3 = Text3 & ChrW(Val(“&H“ & Mid(hexData, i, 2) & “ “Next End SubPrivate Sub Form_Load()Text1 = “Text2 = “Text3 = “ End SubVB 串口通信

3、中经常会遇到 10 进制浮点数转为多字节 Byte 数据类型的情况,以及在接收后 需转为 10 进制浮点数需求。 VB 有专门的 API 函数 CopyMemory 能处理 2-10 进制浮点数转换和 10-2 进制浮点数转换。 下列代码演示了 10 进制 Single(单精度浮点型转为 16 进制字符显示的浮点数和其相反运 算:Option Explicit Private Declare Sub CopyMemory Lib “kernel32“ Alias “RtlMoveMemory“ (Destination As Any, Source As Any, ByVal Length A

4、s Long) Private Sub BinToSin_Click()Dim sinStr As StringDim sinSj As SingleDim Buffer(3) As ByteDim i As IntegersinStr = Text2For i = 1 To Len(Text2) Step 2Buffer(7 - i) / 2) = Val(“&H“ & Mid(sinStr, i, 2)NextCopyMemory ByVal VarPtr(sinSj), ByVal VarPtr(Buffer(0), 4Text3 = sinSj End SubPrivate Sub S

5、inToBin_Click()Dim i As IntegerDim hexData As StringDim a As SingleDim Buffer(3) As Bytea = Val(Text1)CopyMemory Buffer(0), a, 4For i = 0 To 3If Len(Hex(Buffer(i) = 1 ThenhexData = “0“ & Hex(Buffer(i) + hexDataElsehexData = Hex(Buffer(i) + hexDataEnd IfNextText2 = hexData End Sub 下列代码演示了 10 进制 Doubl

6、e(双精度浮点型)转为 16 进制字符显示的浮点数和其相反 运算:Option Explicit Private Declare Sub CopyMemory Lib “kernel32“ Alias “RtlMoveMemory“ (Destination As Any, Source As Any, ByVal Length As Long) Private Sub cmdDoubHex_Click()Dim i As IntegerDim hexData As StringDim a As DoubleDim Buffer(7) As Bytea = Val(Text1)CopyMemo

7、ry Buffer(0), a, 8For i = 0 To 7If Len(Hex(Buffer(i) = 1 ThenhexData = “0“ & Hex(Buffer(i) + hexDataElsehexData = Hex(Buffer(i) + hexDataEnd IfNextText2 = hexData End SubPrivate Sub cmdHexDec_Click()Dim sinStr As StringDim sinSj As DoubleDim bytes(7) As ByteDim i As IntegersinStr = Text2For i = 1 To

8、 Len(Text2) Step 2bytes(15 - i) / 2) = Val(“&H“ & Mid(sinStr, i, 2)NextCopyMemory ByVal VarPtr(sinSj), ByVal VarPtr(bytes(0), 8Text3 = sinSj End Sub但从中无法了解它是如何进行运算处理的。以下通过对 Single(单精度浮点型)和 Double(双精度浮点型)在内存的储存方式进行分析。 VB 的 Single 数据类型 Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围 在负数的时候是从 -3.40282

9、3E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38。Single 的类型声明字符为感叹号 (!)。 在内存以 32 位二进制形式存在:XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX 第 1 位为符号位 第 2-9 位为阶码位 第 10-32 位为 2 进制小数尾值 即 F2 n * 1. XXXXXXX XXXXXXXX XXXXXXXX 其中 F 为正号或负号(首为为 0 正数,首位为 1 负数 n 为 2-9 位组成的 BYTE 数据值 XXXXXXX XXXXXXXX XXXXXXXX 为尾数 Dou

10、ble(双精度浮点型)变量存储为 IEEE 64 位(8 个字节)浮点数值的形式,它的范围 在负数的时候是从 -1.79769313486232E308 到 -4.94065645841247E-324,而正数的时候是 从 4.94065645841247E-324 到 1.79769313486232E308。Double 的类型声明字符是数字符 号 (#)。 在内存以 64 位二进制形式存在:XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX 第 1 位为符号位 第 2-12 位为阶码位 第 13-

11、64 位为 2 进制小数尾值 即 F2 n * 1. XXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX 其中 F 为正号或负号(首为为 0 正数,首位为 1 负数 n 为 2-12 位组成的 BYTE 数据值XXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX 为尾数 以下代码是基于前叙述的 Single(单精度浮点型)在内存的储存方式进行分析后作出的 2- 10 进制浮点数运算:Option ExplicitDim hexData As StringDim i

12、As SingleDim bindata As StringDim zs As String * 8Dim zssz As StringDim xs As String * 23Dim xs_js() As DoubleDim xs_hj As DoubleDim sinData As SingleDim sHex As StringDim sBin As StringDim fh As StringPrivate Sub Command1_Click()Dim fh As StringsHex = Text1HexToBin (sHex)fh = Mid(bindata, 1, 1) 取符号

13、zs = Mid(bindata, 2, 8) 取指数阶码xs = Mid(bindata, 10, 23) 取 2 进制小数xs_hj = 0zssz = BinToHex(zs)ReDim xs_js(1 To 23)For i = 1 To 23xs_js(i) = Val(Mid(xs, i, 1)xs_hj = xs_hj + xs_js(i) / (2 (i)NextIf zs “000000000000“ ThenShape1.FillColor = vbGreenIf fh = 0 ThensinData = 2 (Val(“&H“ & zssz) - 1023) * (1 +

14、 xs_hj)ElseIf fh = 1 ThensinData = -2 (Val(“&H“ & zssz) - 1023) * (1 + xs_hj)End If ElseIf sHex = “00000000“ ThensinData = 0Shape1.FillColor = vbGreen ElseIf zs = “000000000000“ Then 处理在 0 到 2.2250738585072E-308 及Shape1.FillColor = vbRed 0 到-2.2250738585072E-308 间的浮点数If fh = 0 ThensinData = 2 (Val(“

15、&H“ & zssz) - 1022) * xs_hjElseIf fh = 1 ThensinData = -2 (Val(“&H“ & zssz) - 1022) * xs_hjEnd If End If Text3 = sinData End SubPublic Function HexToBin(ByVal sHex As String) As StringConst s1 = “0000101001101111000“, s2 = “0125A4936DB7FEC8“Dim i As Integer, sBin As StringsHex = UCase(sHex)For i = 1

16、 To Len(sHex)sBin = sBin & Mid(s1, InStr(1, s2, Mid(sHex, i, 1), 4)Next iHexToBin = sBinbindata = sBin End FunctionPublic Function BinToHex(ByVal sBin As String) As StringConst s1 = “0000101001101111000“, s2 = “0125A4936DB7FEC8“Dim i As Integer, sHex As StringsBin = String(3 - (Len(sBin) - 1) Mod 4, “0“) & sBinFor i = 1 To Len(sBin) Step 4sHex = sHex & Mid(s2, InStr(1, s1, Mid(sBin, i, 4), 1)Next iBinToHex = sHex End Function字符串类型转化为

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 其它考试类文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号