如何查看表中的二进制流
发表于:2024-10-25 作者:千家信息网编辑
千家信息网最后更新 2024年10月25日, 最近在整理10来年游戏研发中沉淀下来的知识。很多知识都是因为爱好所以深入学习和实现。也许曾经精力旺盛毫无优先级可言。纯粹为了实现自己的一刹那的想法。现在回忆起来依然记得当初的收获的快感。那会还是端
千家信息网最后更新 2024年10月25日如何查看表中的二进制流
最近在整理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)
数据
二进制
数据库
位置
参数
字符
语言
关联
学习
生成
之间
内存
字符串
玩家
知识
类型
负数
C++
存取
强大
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
博师软件开发
服务器多少钱一台
北京和信天元网络技术
高级数据库管理工程师职称
加强网络安全常识学习
数据库技术王成良答案
杭州股票软件开发公司排名
运营商服务器访问
陕西正规软件开发培训学校
非肿瘤数据库推荐
云讯网络技术有限公司怎么样
事业单位服务器属于固定资产吗
合肥工业大学网络技术工程
合肥邦旭网络技术有限公司
上海智慧社区软件开发电话
校园网络安全防护教育教案
湖南谷创网络技术
软件开发国家政策风险
网络安全450字作文
网络技术中假冒的含义
.net数据库缓存技术
南京参考软件开发怎么样
三星服务器内存2g ddr3
网络安全保障是技术还是法律
币圈量化合约软件开发
信息网络安全黑板报字体
戴尔服务器和苹果服务器哪个好
怎样将普通路由器变成打印服务器
网络技术选修3
自动拨号的服务器