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”).
浙公网安备 33010602011771号