?最近在整理来十年游戏研发中沉淀下来的知识。很多知识都是因为爱好所以深入学习和实现。也许曾经精力旺盛毫无优先级可言。纯粹为了实现自己的一刹那的想法。现在回忆起来依然记得当初的收获的快感。那会还是端游时代。编程主流语言是c++。数据库使用该软件。
?很多玩家数据都是存放二进制流的方式。每次读写都需要c++加载到内存通过调试模式逐个看内存数据。尤其想看玩家数据是否符合正常等因为是二进制流。无法直接查看带来极大的困难。痛点激发出程序员本能的一切为了懒得需求。能否直接使用数据库存储过程查看二进制流。通过数据库函数实现。
?数据库也是一种强大的语言。所以二进制的存取完全可以数据库来完成。同时完全理解各种语言在二进制流中的关联。学习这些完全体现任何之间都是有关联可以相互转换的。
查看二进制的方法
<前> <代码类=" lang-mssql ">——参数一:BUF;参数二:查看类型;参数三:开始位置;;参数四:查看字符占字节数; ——使用选择dbo.Peims_LookBuf () ——查看类型:1表示短型,2表示整形,3表示字符串 创建函数Peims_LookBuf (@Buf VARBINARY (2560), @LookType INT, INT @nBegin, @nLen INT) 返回VARCHAR (2560) 作为 开始 声明@BackStr VARCHAR (2560) 声明@nHight INT 如果@LookType=1 开始 设置@nHight=投(SUBSTRING (@Buf @nBegin + 1, - 1)作为INT) 如果@nHight祝辞127——负数 开始 设置@BackStr=投(( 铸造(SUBSTRING (@Buf @nBegin 1) INT) + (CAST (SUBSTRING (@Buf @nBegin + 1, - 1)作为INT) -256) *力量(2,8) )作为VARCHAR) 结束 其他的 开始 设置@BackStr=投(( 铸造(SUBSTRING (@Buf @nBegin 1) INT) +演员(SUBSTRING (@Buf @nBegin + 1, - 1)作为INT) *力量(2,8) )作为VARCHAR) 结束 结束 如果@LookType=2 开始 设置@nHight=投(SUBSTRING (@Buf @nBegin + 3 1) INT) 如果@nHight祝辞127——负数 开始 设置@BackStr=投(( 铸造(SUBSTRING (@Buf @nBegin 1) INT) +演员(SUBSTRING (@Buf @nBegin + 1, - 1)作为INT) *力量(2,8) +演员(SUBSTRING (@Buf @nBegin + 2 1) INT) *力量(2,16) + (CAST (SUBSTRING (@Buf @nBegin + 3 1) INT) -256) *力量(2,24) )作为VARCHAR) 结束 其他的 开始 设置@BackStr=投(( 铸造(SUBSTRING (@Buf @nBegin 1) INT) +演员(SUBSTRING (@Buf @nBegin + 1, - 1)作为INT) *力量(2,8) +演员(SUBSTRING (@Buf @nBegin + 2 1) INT) *力量(2,16) +演员(SUBSTRING (@Buf @nBegin + 3 1) INT) *力量(2,24) )作为VARCHAR) 结束 结束 如果@LookType=3 开始 设置@BackStr=投(SUBSTRING (@Buf、@nBegin @nLen)作为VARCHAR) 结束 返回(@BackStr) 结束 代码>数据库生成二进制整形
<前> <代码类=" lang-mssql ">创建函数Peims_ADDIntBuf (@nInt INT) 返回VARBINARY (256) 作为 开始 声明@BackBuf VARBINARY (256) 设置@BackBuf=投(@nInt二进制(4)) 设置@BackBuf=子串(@BackBuf 4 1) + SUBSTRING (@BackBuf 3 1) +子串(@BackBuf 2 1) +子串(@BackBuf 1 1) 返回(@BackBuf) 结束 代码>数据库生成二进制短型
<前> <代码类=" lang-mssql ">创建函数Peims_ADDShortBuf (@nShort SMALLINT) 返回VARBINARY (256) 作为 开始 声明@BackBuf VARBINARY (256) 设置@BackBuf=投(@nShort二进制(2)) 设置@BackBuf=子串(@BackBuf 2 1) +子串(@BackBuf 1 1) 返回(@BackBuf) 结束 代码>删除某位置开始某段的数据
<前> <代码类=" lang-mssql ">创建函数Peims_DelBuf (@Buf VARBINARY (2560), @nBegin INT, INT @nLen) 返回VARBINARY (2560) 作为 开始 声明@BackStr VARBINARY (2560) 设置@BackStr=子串(@Buf 1 @nBegin-1) +子串(@Buf, @nBegin + @nLen datalength (@Buf) -@nBegin -@nLen + 1) 返回(@BackStr) 结束 代码>修改某位置开始某段的数据
<前> <代码类=" lang-mssql ">创建函数Peims_UpdateBuf (@Buf VARBINARY (2560), @vValue VARBINARY (256), @nBegin INT, INT @nLen) 返回VARBINARY (2560) 作为 开始 声明@BackStr VARBINARY (2560) 设置@BackStr=子串(@Buf 1 @nBegin-1) 设置@BackStr=@BackStr + @vValue 设置@BackStr=@BackStr +子串(@Buf @nBegin + @nLen datalength (@Buf) -@nBegin -@nLen + 1) 返回(@BackStr) 结束 代码>