vb 从字符串中取特定字符串

从缓冲区读取的值
第一个字节: 为重量值最高位
第二个字节: 为重量值次高位
第三个字节: 为重量值低位
第四个字节:辅助信息可以不做理睬

因为每次读的值都是变化的,不能确定到底有几位,图中显示的第一条值就是383
前三个字节每个字节都有可能有2位,我怎样才能正确提取出这个值呢
strbuffer = Left(buffer, 7),这样有的时候时候就把第4个字节的8提取出来了

你应该用 Split() 函数,按空格将字符串拆分。
例如:
Dim Str() as string
Str = Split("0 0 3 80 CE 6F", " ")

拆分的结果是一个字符串数组,你循环解析就可以了。追问

你好,按照你的方法,我试了还有一点小问题,譬如说次高位有值为7,低位为7,按实际的应该是07,不过返回的值里0没显示。这样我的结果result就是77,实际值应该是707。请问有什么方法可以解决吗?
strbuffer = Split(buffer, " ")
For i = 0 To 2
result = result + strbuffer(i)
Next

追答

你这思路就不对,16进制的数怎么能直接用加法呢。
至于省略零的情况更不是问题,看下面
strbuffer = Split(buffer, " ")
result = 进制转换函数(strbuffer(0)) * 高位权值 + 进制转换函数(strbuffer(1)) * 次高位权值 + 进制转换函数(strbuffer(2)) * 低位权值
如果你使用的是BCD码,那么 进制转换函数可以省略为一个 Val()。
这里权值是指该位的基准位。
比如:将3.456表示为 03 45 60,则高位权值为1,次高0.01,低位0.0001

追问

我没说清楚,这个值就已经是实际值了,不管他是多少进制的了,用了这条语句来判断,resultN好像所要的结果了
If strbuffer(1) "0" And Len(strbuffer(2)) = 1 Then
strbuffer(2) = "0" & strbuffer(2)
End If
result = strbuffer(0) + strbuffer(1) + strbuffer(2)
resultN=CDbl(result)
非常感谢你

追答

作为一个从业多年的老程序员,郑重的提醒你,写代码一定要“规矩”,别偷懒。
result = Val(strbuffer(0)) * 10000 + Val(strbuffer(1)) * 100 + Val(strbuffer(2))

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-11
加上len(buffer)确定长度是len 还是lenth记不清了
相似回答