PDA

View Full Version : [TLBB] Vấn đề về chuyển đổi chữ sang số!



le_huy
10-01-15, 09:30 PM
hiện tại mình đang gặp một vấn đề, đó là có một xấu "000ABCEA" chẳng hạn (nó ở dạng hex, nhưng mà lại là chuỗi) mình muốn chuyển cái xâu đó sang dạng số (number) trong ngôn ngữ Lua ở trong game thì làm thế nào ạ!!
Mong bạn nào biết có thể giải đáp thắc mắc gúp mình!!
mình xin cảm ơn trước!!!

khungboktvn
10-01-15, 11:48 PM
Bạn lập trình ngôn ngữ gì vậy. C++ à.
Mình dùg autoit thì dãy mã hex này là số 0x000ABCEA <=> 703722

Sói Đẹp Trai
11-01-15, 02:11 AM
Bạn có thể tự thiết kế hàm lấy. Cái này liên quan đến thuật toán đó...

Sói Đẹp Trai
11-01-15, 02:49 AM
Mình có đoạn code này chưa biên dịch thử. Dùng cho Lua bên Client. Tư tưởng:
Muốn chuyển số Hex X sang Dec ta chuyển X qua Bin rồi chuyển từ Bin qua Dec.



local Hex_Bin=
{
["0"]="0000",
["1"]="0001",
["2"]="0010",
["3"]="0011",
["4"]="0100",
["5"]="0101",
["6"]="0110",
["7"]="0111",
["8"]="1000",
["9"]="1001",
["A"]="1010",
["B"]="1011",
["C"]="1100",
["D"]="1101",
["E"]="1110",
["F"]="1111",
}

function Power2(x)
if x==1 then
return 2
end
local p=Power2(math.floor(x/2))
if math.mod(x,2)==0 then return p*p
else return p*p*2
end

function HexToBin(x)
for i=1,string.len(x) --Upcase all Hex part of Hex number x
if x[i]=="a" then
x[i]="A"
elseif x[i]=="b" then
x[i]="B"
elseif x[i]=="c" then
x[i]="C"
elseif x[i]=="d" then
x[i]="D"
elseif x[i]=="e" then
x[i]="E"
elseif x[i]=="f" then
x[i]="F"
end
end
local Bin=""
local i=1
while string.sub(x,i,i)=="0" do --Delete the "0" at start of Hex number x (such as 000FA0 => FA0)
i=i+1
end
x=string.sub(x,i,string.len(x))
for i=1,string.len(x) do
if Hex[x[i]]==nil then --x[i] is not a part of hex number
return "Unknow"
end
Bin=Bin..Hex[x[i]]
end
return Bin
end

function BinToDex(x)
local Sol=0
for i=1,string.len(x)-1 do
if string.sub(x,i,i)==1 then
Sol=Sol+Power2(string.len(x)-i)
end
end
return Sol
end

function HexToDec(x)
local S=HexToBin(x)
if S=="Unknow" then
return -1
end
return BinToDex(S)
end

--To call this Script, you must call by HexToDec(Number) in which Number is a Hex number you want to convert to Dec number
--If the result is -1, you pressed a wrong Hex number


Trong đó có vài cái hàm chỉ dùng đc bên Client mà ko dùng đc bên SV, nếu muốn chuyển qua sv thì bạn phải chuyển các thứ như sau:
string.sub => strsub
string.len => strlen
math.mod => mod
math.floor => floor

Sói Đẹp Trai
11-01-15, 02:59 AM
Lưu ý code trên là Lua Basic nên ko có hàm chức năng gì cả bạn nhé. Bạn có thể paste vào trình biên dịch Lua nào đó trước khi copy vào Client hoặc sv tránh báo lỗi. Và Lua Basic thì cả 2 cái hàm mà mình nói 1 cái sv còn 1 cái client đều dùng được nhé. Cũng đừng ngạc nhiên vì C++ hay Java hay các ngôn ngữ khác bạn phải thao tác khá mệt với cái phần chuyển Hex qua Bin. Trong lua thì mảng của nó định nghĩa đặc biệt nên rất ngắn

le_huy
11-01-15, 11:53 AM
Trước hết , cảm ơn 2 bạn :) ! chả là muốn gửi cái chuỗi đó từ client về sever mà thằng Xscript nó ko cho gửi xâu về đành phải dùng đến hạ sách ý.!
Bên client mình dùng hàm "string.find(par1,par2,par3)" với 3 thông số mà nó ko chịu chạy cho nên hơi bị lúng túng!!

Sói Đẹp Trai
11-01-15, 06:17 PM
Bạn nên xem qua cái luabasic trước và hiểu cấu trúc các câu lệnh trên chuỗi của nó. Ngoài ra theo mình nhớ ko nhầm thì gửi chuỗi về sv đc. Hồi trc mình có thử rồi. Nhưng hạn chế dùng chuỗi vì nhiều lúc nó sẽ gửi giá trị linh tinh do cách định nghĩa kiểu string của lua khá củ chuối

huuduyen_05
11-01-15, 07:09 PM
Game server TLBB sử dụng bộ Lua ở đây <b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> Các bạn có thể tham khảo và sử dụng.

Ở client thì sử dụng bộ Lua mới hơn là ver 5. thì phải.