硬汉嵌入式论坛

 找回密码
 立即注册
查看: 625|回复: 1
收起左侧

[Lua] 将C语言的UID算法函数翻译为lua语言注意事项

[复制链接]

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
发表于 2022-11-5 23:08:19 | 显示全部楼层 |阅读模式
今天帮一个客户将UID加密算法由C语言转换为lua语言。

需注意的:
1、C中的 ^ 需要替换为 ~ , 按位异或。
2、C中的数组下标需要加1。 c数组从0开始编码,lua是从1开始编码。
3、if 条件判断,位操作结果需要明确和数值进行比较。if(La>>23)   ==》  if ((La>>23)~= 0)  then
4、lua 不支持自加等操作。  x += 2;  ==>  x = x + 2  
5、lua 不支持等式结果直接做形参,需要拆分。
      func1(x=x+2)   ==>  x=x+2   func1(x)
6、C中的宏函数转换为lua函数即可, 比如:
     #define getbit(x,y)   ((x) >> (y)&1)
     转换为:
     function getbit(x,y)
        return ((x) >> (y)&1)
     end

欣慰的是:
1、对64位无符号整数的移位操作支持完美,以前以为仅能支持 int64_t.
    c语句: uint16_t A0, A1;    A1 = (A0 & 0x7FFFFFFFE0000000)>>29;
    lua语句 :  A1 = (A0  & 0x7FFFFFFFE0000000)>>29;

    c语句:    R2 = ((P1&3)<<32)+P2;     // P1 P2  R2 变量均为 unsigned long long int
     lua语句 :  R2 = ((P1&3)<<32)+P2;
2、C中的分号可以不用去掉,不影响lua翻译执行



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107462
QQ
发表于 2022-11-6 00:27:58 | 显示全部楼层
还有个取整,C转LUA用到的地方也很多。
image.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-2 08:48 , Processed in 0.162890 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表