文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何查看表中的二进制流

2023-06-05 03:28

关注

​ 最近在整理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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯