四字节转浮点数

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

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可以快速开发上位机,本站主要记录了学习过程中遇到的问题和解决办法及aardio代码分享

这里主要专注于aardio学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.

Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
本 站 主 站:Stm32cube中文网
Sciter中文在线文档Sciter在线学习文档
空间赞助:才仁机械
打赏本站
Loading...