新聞中心
? 最近在整理10來年游戲研發(fā)中沉淀下來的知識。很多知識都是因為愛好所以深入學習和實現(xiàn)。也許曾經(jīng)精力旺盛毫無優(yōu)先級可言。純粹為了實現(xiàn)自己的一剎那的想法?,F(xiàn)在回憶起來依然記得當初的收獲的快感。那會還是端游時代。編程主流語言是C++。數(shù)據(jù)庫使用MSSQL。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比張家口網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式張家口網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋張家口地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。
? 很多玩家數(shù)據(jù)都是存放二進制流的方式。每次讀寫都需要C++加載到內(nèi)存通過調(diào)試模式逐個看內(nèi)存數(shù)據(jù)。尤其想看玩家數(shù)據(jù)是否符合正常等因為是二進制流。無法直接查看帶來極大的困難。痛點激發(fā)出程序員本能的一切為了懶得需求。能否直接使用數(shù)據(jù)庫存儲過程查看二進制流。通過數(shù)據(jù)庫函數(shù)實現(xiàn)。
? 數(shù)據(jù)庫也是一種強大的語言。所以二進制的存取完全可以數(shù)據(jù)庫來完成。同時完全理解各種語言在二進制流中的關聯(lián)。學習這些完全體現(xiàn)任何之間都是有關聯(lián)可以相互轉(zhuǎn)換的。
查看二進制的方法
--參數(shù)一:BUF;參數(shù)二:查看類型;參數(shù)三:開始位置;;參數(shù)四:查看字符占字節(jié)數(shù);
--使用select dbo.Peims_LookBuf()
--查看類型: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 --負數(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 --負數(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ù)庫生成二進制整形
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ù)庫生成二進制短型
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
刪除某位置開始某段的數(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
修改某位置開始某段的數(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
在某個位置插入內(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
應用例子:類比推廣。所以二進制的存取完全可以數(shù)據(jù)庫來完成。學習這些完全體現(xiàn)任何之間都是有關聯(lián)可以相互轉(zhuǎn)換的。
DECLARE @BackBuf VARBINARY(2560)
SET @BackBuf=dbo.Peims_ADDIntBuf(2147483647)
SET @BackBuf= @BackBuf+CAST('pe 中國zhongguo' AS BINARY(330)) --字符串的直接生成二進制
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)
網(wǎng)站欄目:如何查看表中的二進制流
URL地址:http://fisionsoft.com.cn/article/jjpjjs.html