如何查看表中的二进制流
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日, 最近在整理10来年游戏研发中沉淀下来的知识。很多知识都是因为爱好所以深入学习和实现。也许曾经精力旺盛毫无优先级可言。纯粹为了实现自己的一刹那的想法。现在回忆起来依然记得当初的收获的快感。那会还是端
千家信息网最后更新 2025年02月04日如何查看表中的二进制流
最近在整理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安全错误
数据库的锁怎样保障安全
互联网公益科技
落实网络安全工作领导小组
当前网络安全市场介绍
软件开发工程定义 英语
网络安全等级测评师证书怎么考
生成数据库结构sql语句
oracle自带的数据库
网络安全思想防线
软件开发电脑配置跑分
风电场网络安全标准
修改数据库的文件大小
服务器cpu散热
船载加固式服务器应用场景
v5服务器警告
我的世界手机版锁屏服务器不退出
济源网络安全工程师岗位职责
企业网络安全基本内容
证监会 数据库安全
远程连接数据库传输数据
西安千舸网络技术有限公司
数据库城市表
计算机网络技术专业情况分析
生成数据库结构sql语句
电脑用国外的服务器查得到吗
登陆谷歌地球服务器
京东黄金眼软件开发工程师
网络安全周说说
软件开发就是编写程序对吗
湖北信息化软件开发服务厂家现货
云显卡服务器