如何查看表中的二进制流
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日, 最近在整理10来年游戏研发中沉淀下来的知识。很多知识都是因为爱好所以深入学习和实现。也许曾经精力旺盛毫无优先级可言。纯粹为了实现自己的一刹那的想法。现在回忆起来依然记得当初的收获的快感。那会还是端
千家信息网最后更新 2025年12月03日如何查看表中的二进制流
最近在整理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安全错误
数据库的锁怎样保障安全
数据库表主要包含什么和什么
软件开发云南
数据库查询伴生
联合审查网络安全吗
医院社会评价数据库
数据库中视图名规则
订单软件开发流程图
网络技术是专业课还是基础课
发邮件提示服务器拒绝收件人地址
60盘位以上服务器
井冈山民宿软件开发
软件开发属不属于互联网信息服务
国美的网络技术案例分析
数据库表中如何设置唯一性
卓云科技互联网
文件服务器如何配置
管理类软件开发哪家靠谱
微信票软件开发
网络安全隐患整改报告说疑似挖矿
应届研究生软件开发工资
汉中趣讯网络技术有限公司
我的世界服务器水晶怎么拆
济南兴业银行软件开发
山西多功能软件开发代理价钱
网站数据库表功能
电脑网络技术论坛
现在外卖平台软件开发容易吗
国美的网络技术案例分析
小学网络安全各种制度
计算机网络技术什么系