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

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

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

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

登录后方可回帖

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