非常时期,学校决定毕业设计答辩提前,时间吃紧啦,高手帮帮忙吧!
问题是这样的:下位机是用C++在DOS环境下做的实时计算,现要将计算的结果(浮点双精度型)通过串口传到上位机中处理。上位机主要用于演示,因此用VB做界面,用MSComm控件接收传来的数据。但因下位机的发送端是以字符形式发送的,因此用了一个共用体
Union{double data;
      char ch[8]}sendbuf;
来将double型化为字符传输。
现在在VB接收端遇到了麻烦,找不到一个合适的办法将八个字节的数据重新组装成double,因VB没有Union概念。我已编写了一个算法用位运算试图转化,但循环层次太多,影响实时效果。
请各位高手指点一下,有什么办法可以把已接受到的八个字节数据重新组装成double。
非典惹得祸,毕设要干不完啦,Help~~~

解决方案 »

  1.   


    用api函数,
    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)function ChangTOdbl(byval byt() as byte) as double
         dim xx as double
         CopyMemory xx,byt(0),8
         ChangTodbl=xx 
    end function
      

  2.   

    高手,用CDble()不行,因为自变量只能为数字型
    高手,上面的API函数,恐怕要有障碍。MSComm控件的Input无法赋值给Byte变量,提示:类型不匹配。我调过InputMode,但还是不行,似乎MSComm.Input只能赋给字符串?
    高手多费费心,在下感激不尽!!!鞠躬拜上!:)
      

  3.   

    这个不难吧Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)dim d( 0 to 0 ) as double
    dim c( 0 to 7 ) as byte
    copymemory d( 0 ), c( 0 ), 8debug.print d( 0 )搞定反过来也一样至于串口转换也很简单    Dim MyArrays() As Byte
        Dim strBCD As String
        Dim sngTime As Single
        Dim MyData As Variant    MyData = MSComm1.Input
        MyArrays = MyData
    以后可以按照MyArrays(0)这种方式来访问,正好给那个double类型副职。
      

  4.   

    同意: JennyVenus() 老兄的
      

  5.   

    同意: JennyVenus() 老兄的
    我做过哪个东西,是对的。
      

  6.   

    >上个星期日,我一个同学到我们家来,看见我们家有一串春节窝藏的挂鞭,非要给 
    >放了。我劝他说:"不过年不过节的,你放它干吗呀?"他不干,一手拿着烟头儿, 
    >一手抢我的挂鞭,还冲我嚷嚷:"多少年的春节我都没放上!你不让我点爆竹啊, 
    >我非点!我非点!"结果从我们家门儿外边儿撞进仨戴白口罩儿的给丫抓走了! 

    >星期一,我们晚上家闹蚊子,嗡嗡嗡的吵的人睡不着觉。我女朋友气疯了,翻箱倒 
    >柜找出一盘儿蚊香来。我劝她说:"才四月份,哪儿用得着那东西啊!"她不干,一 
    >边插蚊香,一边寻摸打火机,还冲我嚷嚷:"它吵的我睡不着!你不让我点蚊香 
    >啊,我非点!我非点!"结果从我们家床底下翻出仨戴白口罩儿的给她抓走了! 

    >星期二,我请个客户去外面吃饭,那孙子非要要什么大闸蟹!我劝他说:"现在还 
    >不是吃那个的时候,不肥!"他不干,一边翻菜谱一遍剔牙缝儿,还冲我嚷嚷:"老 
    >子我就没吃过那个!你不让我点大闸蟹啊,我非点!我非点!!"结果从汤盆儿里 
    >冒出仨戴白口罩儿的给丫抓走了!! 

    >星期三,去上MBA的在职班,估计是上课的人太少了,老师有点儿生气,要查人 
    >数。我坐在第一排,小声儿劝他说:"老师啊,不是大家不想来,这日子口得病的 
    >太多啦!"他不干,一边拍桌子一遍拿考勤表,还冲我嚷嚷:"这么多年我就没见过 
    >这么无组织的班!你不让我点名啊,我非点!我非点!!"结果从讲台里钻出仨戴 
    >白口罩儿的把丫给抓走了!! 

    >星期四,在家和我的乡下表哥一起上网,他看见一个网站上有色情网站的广告条 
    >儿,想链接到那个XXX网站开开眼。我劝他说:"那些网站都是满眼肉色翻飞的,没 
    >什么劲!"他不干,一遍盯着屏幕一遍抢鼠标,还冲我嚷嚷:"你是上腻了,俺还没 
    >去过呢!你不让俺点击啊,俺非点!俺非点!!"结果从电脑桌下面冲出仨戴白口 
    >罩儿的把他给抓走了!! 

    >星期五,和我们财务去银行取款。10万块钱取出来了,她不放心,非要一张一张数 
    >清楚。我劝她说:"这儿人多眼杂的,让人盯上就麻烦了!"她不干,一边儿掏钱一 
    >边往手心儿里吐吐沫,还冲我嚷嚷:"万一少了一张,你赔我赔?你不让我点清楚 
    >啊,我非点!我非点!!"结果从提款机里吐出仨戴白口罩儿的把她给抓走了!! 

    >星期六,陪我爸去药房抓药,看见一个白胡子老中医正坐堂。我爸正好那天落枕 
    >了,想让老中医给看看。那老头子眯着眼睛给我爸号了半天脉,结果说是穴道堵住 
    >了,要给我爸开开穴道。我劝我爸说:"这老中医没谱儿,别再添别的毛病!"他不 
    >干,一边脱上衣一边转脖子,还冲我嚷嚷:"你懂个屁!你不让我点穴啊,我非 
    >点!我非点!!"结果从药箱子里蹦出仨戴白口罩儿的把我爸给抓走了!! 

    >这星期天,和我同事还有他女朋友一起去钱柜。唱开了之后,他非要唱孙楠的歌。 
    >我劝他说:"你嗓子没那么高,别在女朋友面前丢人啦!"他不干,一边翻歌本一边 
    >抢话筒,还冲我嚷嚷:"你怎么知道我唱不上去啊?!你不让我点啊,我非点!我 
    >非点!!" 结果从电视机里炸出仨戴白口罩儿的把他给抓走了 
      

  7.   

    高手,多谢指教,不过上午按照你们讲的方法试了一下,的确能转化成DOUBLE型了,不过取出的数不对.
    那么我想再请教一下,如何保证从MSCoomm.Input中取出的正好为八个字节的字符串?
    我试过Dim s as String *8,但不对.我也调过MSComm.InputLen和MSComm.SThread,问题仍然存在
    我想请问取出的数不对的原因是否与MSComm控件的设置有关?
    顺便,下位机上传的数据量很大,一次循环运算输出十个Double,一次任务都在1000个循环以上.
    再请高手指点,感激不尽:)
      

  8.   

    呵呵,毕设嘛,老师都会拿同样的东西来折磨人啦.既然楼上兄台作过,请指教一二吧,刚才按照又几位高手的方法试了一下,数取的还是不对呀
    另,我记得VB和C存字符串的方法不一样啊,VB的字符串在内存中存放好像是Len+10?可是没有指针,我怎么取啊?
    急啊,急啊,本来想混金牌毕业生的,摊子铺得太大了,如今这沸点闹的,要干不完啦
    高手,救急啊救急~~~!
      

  9.   

    唉,你就不能直接在C里面把类型转换好了再往VB里送吗?
    调一下sprintf格式化好了字符串再送给VB
      

  10.   

    不是不会送,是收到了八个字符不会再装成double