最近在整理10来年游戏研发中沉淀下来的知识。很多知识都是因为爱好所以深入学习和实现。也许曾经精力旺盛毫无优先级可言。纯粹为了实现自己的一刹那的想法。现在回忆起来依然记得当初的收获的快感。那会还是端游时代。编程主流语言是C++。数据库使用MSSQL。
很多玩家数据都是存放二进制流的方式。每次读写都需要C++加载到内存通过调试模式逐个看内存数据。尤其想看玩家数据是否符合正常等因为是二进制流。无法直接查看带来极大的困难。痛点激发出程序员本能的一切为了懒得需求。能否直接使用数据库存储过程查看二进制流。通过数据库函数实现。
数据库也是一种强大的语言。所以二进制的存取完全可以数据库来完成。同时完全理解各种语言在二进制流中的关联。学习这些完全体现任何之间都是有关联可以相互转换的。
查看二进制的方法
--参数一:BUF;参数二:查看类型;参数三:开始位置;;参数四:查看字符占字节数;--使用select dbo.Peims_LookBuf()--查看类型:1表示短型,2表示整形,3表示字符串CREATE FUNCTION Peims_LookBuf(@Buf VARBINARY(2560), @LookType INT, @nBegin INT, @nLen INT)RETURNS VARCHAR(2560)ASBEGIN DECLARE @BackStr VARCHAR(2560) DECLARE @nHight INT IF @LookType = 1 BEGIN SET @nHight = CAST(SUBSTRING(@Buf, @nBegin+1,1)AS INT) IF @nHight >127 --负数 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 --负数 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
数据库生成二进制整形
CREATE FUNCTION Peims_ADDIntBuf(@nInt INT)RETURNS VARBINARY(256)ASBEGIN 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
数据库生成二进制短型
CREATE FUNCTION Peims_ADDShortBuf(@nShort SMALLINT)RETURNS VARBINARY(256)ASBEGIN DECLARE @BackBuf VARBINARY(256) SET @BackBuf=CAST(@nShort AS BINARY(2)) SET @BackBuf=SUBSTRING(@BackBuf,2,1)+SUBSTRING(@BackBuf,1,1) RETURN(@BackBuf)END
删除某位置开始某段的数据
CREATE FUNCTION Peims_DelBuf(@Buf VARBINARY(2560), @nBegin INT, @nLen INT)RETURNS VARBINARY(2560)ASBEGIN DECLARE @BackStr VARBINARY(2560) SET @BackStr=SUBSTRING(@Buf,1,@nBegin-1)+SUBSTRING(@Buf,@nBegin+@nLen,datalength(@Buf)-@nBegin-@nLen+1) RETURN(@BackStr)END
修改某位置开始某段的数据
CREATE FUNCTION Peims_UpdateBuf(@Buf VARBINARY(2560), @vValue VARBINARY(256),@nBegin INT, @nLen INT)RETURNS VARBINARY(2560)ASBEGIN 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
在某个位置插入内容
CREATE FUNCTION Peims_InsertBuf(@Buf VARBINARY(2560), @vValue VARBINARY(256),@nBegin INT)RETURNS VARBINARY(2560)ASBEGIN 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
应用例子:类比推广。所以二进制的存取完全可以数据库来完成。学习这些完全体现任何之间都是有关联可以相互转换的。
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)
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756