简短的介绍:
根据规范,高字节代表创建 ZIP 文件的操作系统。低字节是使用的 ZIP 规范的版本。
在您的示例中:
788 =0x0314
创建 ZIP 文件的操作系统:(
0x03
高字节):UNIX
4.4.2.1 高字节表示文件属性信息的兼容性。如果外部文件属性与 MS-DOS 兼容并且可以通过 PKZIP for DOS 版本 2.04g 读取,则该值将为零。如果这些属性不兼容,则此值将标识属性兼容的主机系统。软件可以使用此信息来确定文本文件等的行记录格式。
ZIP 规范版本:(
0x14
低字节):2.0 版
0x14 / 10
= 2(主要版本号)
0x14 % 10
= 0(次要版本号)
4.4.2.3 低字节表示用于对文件进行编码的软件所支持的 ZIP 规范版本(本文档的版本)。value/10 表示主版本号,值 mod 10 是次要版本号。
对于 Windows NTFS,正确的“版本制作者”值应该是:
0x0A14
= 2580
0x0A
(高字节):Windows NTFS (Win32)
0x14
(低字节):2.0 版
从adm-zip 源中提取:
var _verMade = 0x14,
_version = 0x0A,
_flags = 0,
_method = 0,
_time = 0,
_crc = 0,
_compressedSize = 0,
_size = 0,
_fnameLen = 0,
_extraLen = 0,
_comLen = 0,
_diskStart = 0,
_inattr = 0,
_attr = 0,
_offset = 0;
switch(process.platform){
case 'win32':
_verMade |= 0x0A00;
case 'darwin':
_verMade |= 0x1300;
default:
_verMade |= 0x0300;
}
在这里您可以看到,使用了 ZIP 规范中的2.0 ( 0x14
) 版本,并且有一个简单的 OR 与创建 ZIP 文件的左移操作系统。
更新:
我编写了一些简单的 JavaScript 示例函数,它们返回正确的值,verMade
并从verMade
.
套装版本:
function zip_version_set(os, spec_major, spec_minor)
{
var ret = (parseInt(spec_major, 10) * 10) + parseInt(spec_minor, 10);
switch (os) {
case "dos":
ret |= 0x0000;
break;
case "win32":
ret |= 0x0A00;
break;
case "darwin":
ret |= 0x1300;
break;
default:
ret |= 0x0300;
}
return ret;
}
用法:
参数 os
:
把她的操作系统字符串。当前可能的值为dos
(MS-DOS)、win32
(Windows NTFS)、darwin
(OS X),默认值为unix
.
参数 spec_major
:将使用的 ZIP 规范中的主要版本号
放在这里。
参数 spec_minor
:将使用的 ZIP 规范中的次要版本号
放在这里。
退货:
退货verMade
。
获取操作系统:
function zip_version_get_os(verMade)
{
var tmp;
var ret;
tmp = (verMade & 0xFF00) >> 8;
switch (tmp) {
case 0x00:
ret = "dos";
break;
case 0x03:
ret = "unix";
break;
case 0x0A:
ret = "win32";
break;
case 0x13:
ret = "darwin";
break;
default:
ret = "unimplemented";
}
return ret;
}
用法:
参数 verMade
:
把verMade
值放在这里。
返回:
以字符串形式返回操作系统。
获取主要版本号(ZIP 规范):
function zip_version_get_major(verMade)
{
return ((verMade & 0xFF) / 10);
}
用法:
参数 verMade
:
把verMade
值放在这里。
返回:
从使用的 ZIP 规范返回主要版本。
获取次要版本号(ZIP 规范):
function zip_version_get_minor(verMade)
{
return ((verMade & 0xFF) % 10);
}
用法:
参数 verMade
:
把verMade
值放在这里。
返回:
从使用的 ZIP 规范返回次要版本。