Lua三:编程技巧二

三:编程技巧

1、 时间的表示

(1)      os.time()  

不带参数调用函数os.time,会以数字形式返回时间。如

>os.time()          -->1478658899

“1478658899”该数字的含义是自一个被称为纪元的固定日期后至今的秒数。在POSIX和Windows系统中这个固定日期均为 Jan 01, 1970, 0:00 UTC。如果以一个日期表作为参数调用函数os.time,那么该函数会返回该标中所描述日期和时间对应的数字。

>os.time({year=2015, month=8, day=15, hour=12, min=45,sec=20})   -->1439653520

(2)   os.date()

使用方法如例:

t=906000490     --ISO 8601格式的日期

print(os.data(“%Y-%m-%d”,t))          --> 1998-09-16

下列表列出了该函数主要的指示符。

%a

星期几的简写(例如,Mon)

%A

星期几的全名(例如,Wednesday)

%b

月份的简写(Sep)

%B

月份的全称(March)

%c

日期和时间(09/16/98  23:48:10)

%d

一个月中的第几天(16)

%H

24小时制中的小时数

%I

12小时制中的小时数

%j

一年中的第几天

%m

月份(范围:01-12)

%M

分钟(范围:00-59)

%S

秒数(范围:00-59)

%x

日期(09/16/98)

%X

时间 (23:48:10)

%y

两位数的年份

%Y

完整的年份

%z

时区

%%

百分号

 

2、 位和字节

(1)      位运算

位运算只能用于整形数。位运算包括&按位与、|按位或、~按位异或、>>逻辑右移、<<逻辑左移和一元运算符~按位取反。

对于一位操作,移位操作会使用0填充空出的位,这种行为通常称为逻辑移位。

>string.format(“%x”,0xff<<12)    --> ff000

(2)      无符号整数型

无符号整型数是指不使用一个比特来储存符号位。Lua语言默认支持的是有符号整型数。所以在打印数值时和关系操作时会出现一些问题。在打印数值时,需要指定以无符号整型数进行输出,如string.format(“%u”,x)。在关系运算时,可以先用掩码掩去两个操作数的符号位,如(0x7ffffffffff ~ mask)< (0x80000000000 ~mask)  --> true。同时,无符号除法也有区别。

(3)      二进制数据和文件

二进制数据:Lua可以将基本类型值(数值和字符串类型)和二进制值之间进行转换。string.pack会把基本类型值打包为二进制字符串,而string.unpack则从二进制字符串中提取转化位基本类型值。string.unpack和string.pack的第一个参数都是用于描述以什么方式打包和转化数据。举例说明:

s=string.pack(“iii”,3,-27,450)

#s      --> 12    

string.unpack(“iii”, s)       --> 3   -27    450   13

上述代码中第一行的pack函数的第一个参数“iii“表示将数据打包成3分整型数的二进制代码,与第二行可以看出打包好后所占空间是一个整型数本身大小的3倍。string.unpack还会返回最后一个读取的元素在二进制字符串中的位置。

对于string.pack,编码一个整型数有几种选项,选项i表示int,选项后可以加上一个1~16的数,如“i7“产生7字节的二进制整型数。举例:

>   x=string.pack(“i7”, 1<<54)

二进制文件:函数io.input和io.output总是以文本方式打开文件。在打开二进制文件时,需要使用“rb“表示读取和”wb“表示写权限,如io.open(arg,”rb”).

posted @ 2021-09-29 00:05  achevery  阅读(180)  评论(0)    收藏  举报