四字节转浮点数

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

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);


登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...