四字节转浮点数

By admin at 2018-08-24 • 0人收藏 • 212人看过

import console; 

var num = "aa 0b 00 52 44 50 52 01 01 52 70 a9 c1 1b"


//以上红色是数据,需要提取

var arrData = string.splitEx( string.trim(num) ,"\s");

//第一种方式:tonumber以16进制来操作

var ret1 = raw.convert({ byte b[]={tonumber(arrData[10],16);tonumber(arrData[11],16);tonumber(arrData[12],16);tonumber(arrData[13],16);} },{float f}).f;

//第二种方式:联合0x前缀

var ret2 = raw.convert({ byte b[]={0x52; 0x70; 0xa9; 0xc1;} },{float f}).f;

var ret3 = raw.convert({ byte b[]={"0x"++arrData[10];"0x"++arrData[11];"0x"++arrData[12];"0x"++arrData[13];} },{float f}).f;


console.log(ret1)

console.log(ret2)

console.log(ret3)

console.pause(true);


3 个回复 | 最后更新于 2018-08-25
2018-08-25   #1

利用TCC编译器来调用C语言,通过C语言直接转换

//aardio调用C语言函数
var code = /****
    #include <stdio.h>
    #include <stdlib.h> 
 
    int func_c (const char *msg)  
    {   
         io_reopen(); //打开控制台窗口 
        
        unsigned char tempc[4];
        tempc[0]=0x06;
        tempc[1]=0x01;
        tempc[2]=0xfe;
        tempc[3]=0x43;
        float tempf;
        memcpy(&tempf,&tempc[0],4);
         
        printf("%f\n",tempf);
        return 0; 
    } 
 
****/
 
import console;
import tcc;  
 
var vm = tcc( ); //创建TCC编译器 
vm.compile(code); //编译C源码
 
//调用C函数
var ret = vm.func_c( 
    string.fromto("测试一下") //注意tcc是ansi编码,aardio是utf8,需要转换一下
);
console.log( "C函数返回值", ret )
 
console.pause();




2018-08-25   #2

那么利用上面的结构体转换能不能反过来将浮点数转换为四字节呢?

console.dump(
    table.tostring(raw.convert({float f=508.008},{byte b[4]}))
)


2018-08-25   #3

将浮点数转换为十六进制四字节

import console; 
 
var xx = raw.convert({float f=508.008},{byte b[4]});
 
console.log(
     string.hex(xx.b)
 )
 
console.pause(true);


登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
黑猫Aar教程网:简码编程
C大Aardio论坛:Aar爱好者论坛
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...