VB.net 如何将bytes()字节数组转换到short型数组?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB.net 如何将bytes()字节数组转换到short型数组?相关的知识,希望对你有一定的参考价值。
Dim value(15000) As short
Dim bytes(30000) As byte
Dim i As Integer
Dim n As Integer
for i=0 to value.Length-1
value(i)=BitConverter.ToInt16(bytes, n)
n +=2
Next
虽然可以用BitConverter.ToInt16(bytes, 0)来转换,但为什么有时报错目的数组长度不够?而且如数据有几万甚至更多时,用这个就会效率大大折扣了!我想到用API函数Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory " (ByVal Destination As String, ByVal Source As String, ByVal Length As Long)拷贝内存时,它报“无法在在DLL“kernel32 .dll "中找到名为“RtlMoveMemory ”的入口点 。”这个错。各位前辈,有没有什么好方法帮我解决这个问题?解决这个bytes()转换到另一个类型的value()数组当中?(这个我在VB6.0中是可以实现的,但在这个VB.net不能)在线等待!
再者,因为我的数据很大,有上百万个数据,用socket发送采集命令后,怎样才能自动接收数据呢?起初我想用拷贝内存,但不行,然后我想用多线程,但没经验,不知道该怎么写,是不是线程里面调用socket的Recive方法接收?Recive()方法是不是阻塞的?如果是阻塞的话,当线程执行到这句时,如果没有数据的话那岂不是阻塞在这里了?那样会不会影响整个程序的工作?(我这么想的:当线程运行时,执行到Recive时就阻塞在那里等待数据(在此阻塞时不影响其它工作),一旦有数据来后就往下执行线程里面的其它代码,然后再回到线程代码最开始的地方执行,再执行到Recive那里,有数据继续接收,没有数据再阻塞,就这样不停的循环阻塞、接收的过程,请问各位前辈我这样想对不对?是不是这样执行的?),如果不是这样,前辈们能给个建议或方法、例子好吗?谢谢!
Dim value(15000) As short '范围是0~15000长度为15001
Dim bytes(30000) As byte '范围是0~30000长度为30001 奇数? 在计算到最后一个字节是会超出范围
我调试了一下 用你上面的方法速度很快 几乎是瞬间完成追问
数组长度不够这个问题我后来也解决了,不过还是谢谢你!^_^ 不过这不是最重要的问题,现在最大的问题是,当bytes()数据很多的话(我采集的数据有上百万个数据),如果不能一下全部接收在bytes()里,就很有必要分段接收这些数据,如果不用多线程接收的话,那只能在外加大循环不停地接收数据,这样一来整个程序都在等着它执行完了才能做其它的事情了。起初我不想用这个循环来接收数据,想用内存拷贝,但不行,如题所说那样!
追答我QQ475211667讨论一下
本回答被提问者采纳以上是关于VB.net 如何将bytes()字节数组转换到short型数组?的主要内容,如果未能解决你的问题,请参考以下文章