欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Lua二进制和十六进制的相互转换以及文件保存传递

程序员文章站 2024-03-16 23:05:40
...

有时候我们有需要保存某个文件或者传输某个文件的需求,当然通过二进制流传输也是同样的道理,但是不利于传递保存。例如,我有张裸照不想被人直接看见,所以我不能直接保存图片,保存二进制码吧太长,所以呢,我可以把他保存成16进制的字符串,一般人根本没法,当我女朋友想看的时候怎么办呢,我可以吧这张照片从16进制重新转换成图片给她看,或者给她自己解,不过估计要分手,笑哭。好吧,直接上代码:


function fileTohexString()

	local fileDir="C:\\Users\\Administrator\\Desktop\\"
	local fileName="headImage.jpg"
	local allhexstr=""
	local hexstr
	local charcode

	local bytesFile=io.open(fileDir..fileName,"rb")

	if nil==bytesFile then

		print('Can not open file')
	else

		local bytes = bytesFile:read("*a")

		for i = 1, string.len(bytes) do

			local charcode = tonumber(string.byte(bytes, i, i));
			local hexstr = string.format("%02X", charcode);

			allhexstr=allhexstr..hexstr
			--hexstrfile:write(hexstr);
		end

		--print(allhexstr)
	end

	return allhexstr;
end


function HexStringTofile(hexstr)

	local fileDir="C:\\Users\\Administrator\\Desktop\\"..os.time()..".jpg"


	local bytesfile = io.open(fileDir, "wb");
	if nil == bytesfile then

		print("Can not open output file to write!\n");

		os.exit();
	end

	--Convert hex string to bytes
	for i = 1, string.len(hexstr) - 1, 2 do

		local doublebytestr = string.sub(hexstr, i, i+1);
		local n = tonumber(doublebytestr, 16);
		if 0 == n then
			bytesfile:write('\00');
		else
			bytesfile:write(string.format("%c", n));
		end
	end


end


local hexStr=fileTohexString()

print("image hex code:"..hexStr)

HexStringTofile(hexStr)

就这么简单,赶快把你裸照或者那个什么用16进制存起来。