? 最近在整理10來(lái)年游戲研發(fā)中沉淀下來(lái)的知識(shí)。很多知識(shí)都是因?yàn)閻?ài)好所以深入學(xué)習(xí)和實(shí)現(xiàn)。也許曾經(jīng)精力旺盛毫無(wú)優(yōu)先級(jí)可言。純粹為了實(shí)現(xiàn)自己的一剎那的想法?,F(xiàn)在回憶起來(lái)依然記得當(dāng)初的收獲的快感。那會(huì)還是端游時(shí)代。編程主流語(yǔ)言是C++。數(shù)據(jù)庫(kù)使用MSSQL。
? 很多玩家數(shù)據(jù)都是存放二進(jìn)制流的方式。每次讀寫(xiě)都需要C++加載到內(nèi)存通過(guò)調(diào)試模式逐個(gè)看內(nèi)存數(shù)據(jù)。尤其想看玩家數(shù)據(jù)是否符合正常等因?yàn)槭嵌M(jìn)制流。無(wú)法直接查看帶來(lái)極大的困難。痛點(diǎn)激發(fā)出程序員本能的一切為了懶得需求。能否直接使用數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程查看二進(jìn)制流。通過(guò)數(shù)據(jù)庫(kù)函數(shù)實(shí)現(xiàn)。
? 數(shù)據(jù)庫(kù)也是一種強(qiáng)大的語(yǔ)言。所以二進(jìn)制的存取完全可以數(shù)據(jù)庫(kù)來(lái)完成。同時(shí)完全理解各種語(yǔ)言在二進(jìn)制流中的關(guān)聯(lián)。學(xué)習(xí)這些完全體現(xiàn)任何之間都是有關(guān)聯(lián)可以相互轉(zhuǎn)換的。
查看二進(jìn)制的方法
--參數(shù)一:BUF;參數(shù)二:查看類(lèi)型;參數(shù)三:開(kāi)始位置;;參數(shù)四:查看字符占字節(jié)數(shù);
--使用select dbo.Peims_LookBuf()
--查看類(lèi)型:1表示短型,2表示整形,3表示字符串
CREATE FUNCTION Peims_LookBuf(@Buf VARBINARY(2560), @LookType INT, @nBegin INT, @nLen INT)
RETURNS VARCHAR(2560)
AS
BEGIN
DECLARE @BackStr VARCHAR(2560)
DECLARE @nHight INT
IF @LookType = 1
BEGIN
SET @nHight = CAST(SUBSTRING(@Buf, @nBegin+1,1)AS INT)
IF @nHight >127 --負(fù)數(shù)
BEGIN
SET @BackStr=CAST((
CAST(SUBSTRING(@Buf, @nBegin,1)AS INT)
+(CAST(SUBSTRING(@Buf, @nBegin+1,1)AS INT)-256)*POWER(2,8)
)AS VARCHAR)
END
ELSE
BEGIN
SET @BackStr=CAST((
CAST(SUBSTRING(@Buf, @nBegin,1)AS INT)
+CAST(SUBSTRING(@Buf, @nBegin+1,1)AS INT)*POWER(2,8)
)AS VARCHAR)
END
END
IF @LookType = 2
BEGIN
SET @nHight = CAST(SUBSTRING(@Buf, @nBegin+3,1)AS INT)
IF @nHight >127 --負(fù)數(shù)
BEGIN
SET @BackStr=CAST((
CAST(SUBSTRING(@Buf, @nBegin,1)AS INT)
+CAST(SUBSTRING(@Buf, @nBegin+1,1)AS INT)*POWER(2,8)
+CAST(SUBSTRING(@Buf, @nBegin+2,1)AS INT)*POWER(2,16)
+(CAST(SUBSTRING(@Buf, @nBegin+3,1)AS INT)-256)*POWER(2,24)
)AS VARCHAR)
END
ELSE
BEGIN
SET @BackStr=CAST((
CAST(SUBSTRING(@Buf, @nBegin,1)AS INT)
+CAST(SUBSTRING(@Buf, @nBegin+1,1)AS INT)*POWER(2,8)
+CAST(SUBSTRING(@Buf, @nBegin+2,1)AS INT)*POWER(2,16)
+CAST(SUBSTRING(@Buf, @nBegin+3,1)AS INT)*POWER(2,24)
)AS VARCHAR)
END
END
IF @LookType = 3
BEGIN
SET @BackStr=CAST(SUBSTRING(@Buf, @nBegin, @nLen)AS VARCHAR)
END
RETURN(@BackStr)
END
數(shù)據(jù)庫(kù)生成二進(jìn)制整形
CREATE FUNCTION Peims_ADDIntBuf(@nInt INT)
RETURNS VARBINARY(256)
AS
BEGIN
DECLARE @BackBuf VARBINARY(256)
SET @BackBuf=CAST(@nInt AS BINARY(4))
SET @BackBuf=SUBSTRING(@BackBuf,4,1)+SUBSTRING(@BackBuf,3,1)+SUBSTRING(@BackBuf,2,1)+SUBSTRING(@BackBuf,1,1)
RETURN(@BackBuf)
END
數(shù)據(jù)庫(kù)生成二進(jìn)制短型
CREATE FUNCTION Peims_ADDShortBuf(@nShort SMALLINT)
RETURNS VARBINARY(256)
AS
BEGIN
DECLARE @BackBuf VARBINARY(256)
SET @BackBuf=CAST(@nShort AS BINARY(2))
SET @BackBuf=SUBSTRING(@BackBuf,2,1)+SUBSTRING(@BackBuf,1,1)
RETURN(@BackBuf)
END
刪除某位置開(kāi)始某段的數(shù)據(jù)
CREATE FUNCTION Peims_DelBuf(@Buf VARBINARY(2560), @nBegin INT, @nLen INT)
RETURNS VARBINARY(2560)
AS
BEGIN
DECLARE @BackStr VARBINARY(2560)
SET @BackStr=SUBSTRING(@Buf,1,@nBegin-1)+SUBSTRING(@Buf,@nBegin+@nLen,datalength(@Buf)-@nBegin-@nLen+1)
RETURN(@BackStr)
END
修改某位置開(kāi)始某段的數(shù)據(jù)
CREATE FUNCTION Peims_UpdateBuf(@Buf VARBINARY(2560), @vValue VARBINARY(256),@nBegin INT, @nLen INT)
RETURNS VARBINARY(2560)
AS
BEGIN
DECLARE @BackStr VARBINARY(2560)
SET @BackStr=SUBSTRING(@Buf,1,@nBegin-1)
SET @BackStr=@BackStr+@vValue
SET @BackStr=@BackStr+SUBSTRING(@Buf,@nBegin+@nLen,datalength(@Buf)-@nBegin-@nLen+1)
RETURN(@BackStr)
END
在某個(gè)位置插入內(nèi)容
CREATE FUNCTION Peims_InsertBuf(@Buf VARBINARY(2560), @vValue VARBINARY(256),@nBegin INT)
RETURNS VARBINARY(2560)
AS
BEGIN
DECLARE @BackStr VARBINARY(2560)
SET @BackStr=SUBSTRING(@Buf,1,@nBegin-1)
SET @BackStr=@BackStr+@vValue
SET @BackStr=@BackStr+SUBSTRING(@Buf,@nBegin,datalength(@Buf)-@nBegin+1)
RETURN(@BackStr)
END
應(yīng)用例子:類(lèi)比推廣。所以二進(jìn)制的存取完全可以數(shù)據(jù)庫(kù)來(lái)完成。學(xué)習(xí)這些完全體現(xiàn)任何之間都是有關(guān)聯(lián)可以相互轉(zhuǎn)換的。
DECLARE @BackBuf VARBINARY(2560)
SET @BackBuf=dbo.Peims_ADDIntBuf(2147483647)
SET @BackBuf= @BackBuf+CAST('pe 中國(guó)zhongguo' AS BINARY(330)) --字符串的直接生成二進(jìn)制
SET @BackBuf= @BackBuf+dbo.Peims_ADDShortBuf(-23567)
SET @BackBuf= @BackBuf+dbo.Peims_ADDIntBuf(25698456)
SELECT datalength(@BackBuf)
SELECT dbo.Peims_LookBuf(@BackBuf,2,1,4),
dbo.Peims_LookBuf(@BackBuf,3,5,330),
dbo.Peims_LookBuf(@BackBuf,1,335,2),
dbo.Peims_LookBuf(@BackBuf,2,337,4)
--刪除某塊
SEt @BackBuf=dbo.Peims_DelBuf(@BackBuf,335,2)
SELECT dbo.Peims_LookBuf(@BackBuf,2,1,4),
dbo.Peims_LookBuf(@BackBuf,3,5,330),
--dbo.Peims_LookBuf(@BackBuf,1,5,2),
dbo.Peims_LookBuf(@BackBuf,2,335,4)
文章標(biāo)題:如何查看表中的二進(jìn)制流-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://aaarwkj.com/article32/dopssc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、品牌網(wǎng)站設(shè)計(jì)、App開(kāi)發(fā)、品牌網(wǎng)站建設(shè)、定制開(kāi)發(fā)、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容