|
今天帮一个客户将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翻译执行
|
|