Mini Kabibi Habibi

Current Path : C:/Program Files/Smart Professional Surveillance System/PC-NVR/Common/Lua/
Upload File :
Current File : C:/Program Files/Smart Professional Surveillance System/PC-NVR/Common/Lua/utils.lua

--
--   (c) Copyright 1992-2005, ZheJiang Dahua Information Technology Stock CO.LTD.
--                            All Rights Reserved
--
--	�� �� ��� utils.lua
--	��    �:  LUA�ű��Ĺ���
--	�޸ļ�¼�� 2005-8-24 ����� <wanghw@dhmail.com> ��ʼ���汾������Ԭ��µĴ������
--             

Global = Global or {};

local utils = {};

-- ����������ַ���ת���ɶ�Ӧ�Ķ������
-- params:
--    hexString (string):    ���ַ�����ʾ��ʮ��������
--                           ��  hexString = "0x30,0x31,0x32",��Ӧ�ľ���
--								 hexArray  = "012"
-- return: 
--    ת�����ʮ�������
function utils.str2hex(hexString)
	local tmp;
	local retStr = "";

	for  w in string.gfind(hexString, "0x%x+") do
	   tmp = tonumber(w, 16);
	   retStr = retStr .. string.char(tmp); 
	end
	
	return retStr;
end

-- ����ַ��������ַ������16����ת�����ַ���飬
function utils.str2chr(str)
	local retStr = "";

	-- �����ַ��Ļ�����ת����16����
	str = string.gsub(str, "'(.)'+", function(h)	return string.format("0x%02X", string.byte(h))end);
	
	-- ��16����ת�����ַ�
	for w in string.gfind(str, "(%w+)(,?)") do
		retStr = retStr .. string.char(tonumber(w, 16));		
	end;
	--printstr(retStr);
	return retStr;
end;



-- ���ַ������ֽ�ת���ɱ����Ҫ��Ϊ������±�ֱ��ʹ�ã�ִ��У�鴦��
function utils.str2table(str)
	local RetTable = {};
	if string.len(str) <= 0 then
		return nil;
	end;
	str = utils.str2chr(str);
	for i = 1, string.len(str) do
		RetTable[i] = string.byte(string.sub(str, i, i + 1));
	end;
	
	return RetTable;	
end;

-- ����������ַ�����ʮ�����Ʒ�ʽ��
-- params:
--    s (string):    ����Ĵ���������������԰���\0�ַ�
-- return: 
--    None
function utils.hexdump(s,width)
	if not width then
		width = 20
	end
	
	local length = string.len(s);
	for i=1,length,width do
		local line = "0x" .. string.sub("00000000" .. string.format("%X", i - 1), -9) .. ": ";
		for j = 1,width do 
			if(i + j - 1> length) then
				break;
			end
			line = line .. string.sub( "00" .. string.format("%X ",string.byte(s,i+j - 1)), -3);
		end
		print(line);
	end
end


-- ��ȡ�ڴ���ص���Ϣ,ͨ����ȡ/proc/meminfo��ȡ
-- params:
--    None
-- return:
--    ����ڴ���Ϣ�ı��
function utils.QueryMemInfo()
	local lineNo = 0;
	local meminfo = {};
	
	if(os.getenv("windir")) then
		meminfo.MemTotal = 262144;         -- ��ֹ�����
		meminfo.MemReservedSize = 24576;         -- ��ֹ�����
		return meminfo;
	end
	
	for line in io.lines("/proc/meminfo") do
		lineNo = lineNo + 1;
		if(lineNo >3) then 
			local key,num = string.gfind(line,"(%a+):%s+(%d+)")();
		
			if (key) then
				meminfo[key] = num + 0;    -- ��Ҫȥ������"+0" ,Ŀ���ǽ��ַ�ת�������
			end
		end
	end
	
	return meminfo;
end

-- �����
-- params:
--    src: Ҫ������Դ�ļ�
--    dst: Ŀ���ļ�
-- return: 
--    �����ɹ�����True
--    ʧ�ܷ���False���ϴ�����Ϣ
function utils.CopyFile(src, dst)
	local src_file, err = io.open(src, "r");
	
	if(not src_file) then
		return false, err;
	end

	local content = src_file:read("*a");
	src_file:close();
	
	local dst_file, err = io.open(dst, "w");
	
	if(not dst_file) then
		return false, err;
	end
	dst_file:write(content);
	dst_file:close();
	return true;
end	


-- �������ַ����д���ʼλ�ÿ�ʼһ�����ȵ��ַ����滻������ַ���
-- params:
--    str (string):    ���滻���ַ���
--    replace(string): Ҫ�滻���ַ���
--    startPos(int):   Ҫ�滻���ַ����Ŀ�ʼλ��
--    length(int)  :   Ҫ�滻���ַ����ij���
-- return: 
--    �滻����ַ���
function string.replace(str, replaceWith,startPos,length)
	if not length then
		length = 1;
	end
	
	return string.sub(str,1,startPos - 1) 
		.. replaceWith 
		.. string.sub(str,startPos + length);
end


Global.Utils = utils;
return utils;