aar里各种字符和数据格式相互转换总结

By admin at 2017-12-10 • 0人收藏 • 2955人看过

四字节转换为浮点数方法一:

利用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();

6 个回复 | 最后更新于 2017-12-10
2017-12-10   #1

经过qq群群主大K指导,下面的方式更简洁:

利用结构体转换函数可以实现

import console;
 
console.open()
console.log(
    raw.convert({byte b[4] = {0x06;0x01;0xfe;0x43}},{float f}).f
)
console.pause();

效果和上面的一样

2017-12-10   #2

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

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



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

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


2017-12-10   #3
//进制转换
//用格式化函数可以实现数字的进制转换
 
io.open()
 
//数字转换为二进制字符串
str = string.format("%b",23 );
io.print(str)
 
//二进制字符串转换为数字
n = tonumber(str,2)
io.print(n)
 
//数字转换为八进制字符串
str = string.format("%o",23 );
io.print(str)
 
//八进制字符串转换为数字
n = tonumber(str,8)
io.print(n)
//数字转换为十六进制字符串
str = string.format("%x",23 );
io.print(str)
 
//十六进制字符串转换为数字
n = tonumber(str,16)
io.print(n)
execute("pause")


2017-12-10   #4

把数字变成字母用string.pack(65)

string.hex

string.unhex

string.pack

string.unpack

2017-12-10   #5

将一个数字格式化为16进制字符显示(双字节)

import console; 
//var num = console.getNumber( "请输入数值:" )
 
var num1 = 65; 
var num2 = 564; 
console.log(num1,"=",string.format("%.4X", num1))
console.log(num2,"=",string.format("%.4X", num2))
console.pause(true);

2017-12-10   #6
import console; 
 //acsii转换为HEX码
var Hex=function(data,len){
    var str="";
    for(i=1;len;1){
            str = str++" "++string.right(string.format("%X", data[ i ]),2);//默认转换成有符号字节,因此取最右边两位  HEX码
        }
    return str; 
    }
 //hex转ascii
 var Ascii=function(data){
   var data = string.replace(data," ","");
    var str="";           
        for(i=1;#data;2){
            str =str ++ string.pack( eval("0x"++data[[i]]++data[[i+1]] ));
        }
    return str; 
}   
  
 
var ssss = "64 65 66 67 68 69";
 
console.log(Ascii(ssss))
console.log(eval("0x64"))
console.log(string.pack(eval("0x64")))
 
 
console.pause(true);

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



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

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

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...