十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
成都创新互联主要从事做网站、网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务平坝,10多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
Dim aa(3) As Byte
Dim f As Single
aa(0) = H0
aa(1) = H0
aa(2) = H80
aa(3) = H3F
'CopyMemory(f, aa, 4)
f = BitConverter.ToSingle(aa, 0)
TextBox1.Text = f
End Sub
End Class
首先是从串口中接收的数据.但我不知道你这是不是十六进制的.
我的程序是十六进制的浮点数转换.
假如从串口传过来的数据是:02024167A322 其中 4167A322是浮点数.
那么你就可以用mid()函娄截取浮点数部分.
在下面的程序中MID我就不用了.用的是从TXTBOX控件中输入十六进制数转换为浮点型:
在command_click()事件下写入
Dim b As String
Dim l As Long
Dim f1 As Single
b = Text1.Text
l = Val("H" b)
CopyMemory f1, l, 4 '调用模块中的COPY声明,意义为:将L复制给F1,位数为四位.
Text2.Text = f1
在工程中添加一个模块:写入:
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
这段程序
这样就可以转换了.
但是如果十六进制数超出了浮点数的范围那么VB会自动用科学计数法显示比如说FFFFFFFF.那么最后的浮点数肯定是科学计数法.
Dim s As String = "你的字符串"
Dim si As Single = CType(Val(s), Single)
MsgBox(si)
程序里测试通过 你试试看。
#读取上次检查到的行数
last_line=`cat ./mailinfo`
echo "上次行数:"$last_line
#算出本次alert日志的行数
current_line=`wc -l $alert_log|awk '{print $1}'`
echo "本次行数:"$current_line
#取上次行数和本次行数之间的alert日志内容,然后把ORA错误及上下三行放到mailinfo中
CSng(应该是吧),返回单精度值
Hex函数,只能返回整数
--------------------------------------
也许是我被CSng的名字骗到……但CSng(1.1234)=1.1234是不争的事实……我猜你用整型数储存的返回值吧……代码这样写:
Dim mySng as Single '你是不是声明成Long或Integer了?
mySng = CSng(1.1234) 'CSng参见下文
MsgBox mySng '是1.1234,一定是1.1234
'顺便问下楼主IEEE754浮点数和Single是不是一回事?对这方面没有了解。
CSng Single 负数为 -3.402823E38 至 -1.401298E-45;正数为 1.401298E-45 至 3.402823E38
至于转为4字节值,可以根据一下代码改编
Function funSignSngTo4Byt(SingleData As Single, ByRef tBytes() As Byte) As Boolean
'高位在前,低位在后
Dim i, d As Integer
Dim PorN As Byte
Dim ExpVal, temp As Long
Dim FraVal, t1 As Long
Dim SingleFra, tempval As Single
Dim gbytBinData(3) As Byte
If SingleData = 0 Then
For i = 0 To 3
gbytBinData(i) = 0
Next i
Exit Function
End If
If SingleData = 0 Then '符号位
PorN = 0
Else
PorN = H80
SingleData = -1 * SingleData '变为正数
End If
ExpVal = Int(Log(SingleData) / Log(2)) '指数
If ExpVal 128 Then
funSignSngTo4Byt = False
Exit Function
End If
If ExpVal = 127 Then
SingleFra = SingleData / (2 ^ ExpVal)
Else
SingleFra = SingleData / (2 ^ ExpVal) - 1
End If
FraVal = Int(SingleFra * 128 * 256 * 256) And HFFFFFF
ExpVal = ExpVal + 127
gbytBinData(0) = PorN + ExpVal \ 2
gbytBinData(3) = FraVal And HFF
FraVal = Int(FraVal \ 256)
gbytBinData(2) = FraVal Mod 256
FraVal = FraVal \ 256
gbytBinData(1) = (FraVal Mod 256) Or ((ExpVal And 1) * 128)
For i = 0 To 3
tBytes(i) = gbytBinData(i)
Next i
End Function
tBytes()里的值就是SingleData的四个字节
说句实话lz应该先上网看看相关的资料,其实上面的代码是我从网上看到的,加了个输出为4字节就贴上来了……
原贴