字节数组和二进制读取-用于测试/开发的调试环境?

如何解决字节数组和二进制读取-用于测试/开发的调试环境?

| 我(几乎)是该主题的新手,并且对此进行了很多阅读。书籍,Stackexchange,博客等。您知道,这对开发人员来说很常见。当您可以调试和测试所学内容时,我认为更容易实现“全面了解”。我发现了很多理论信息,但很少尝试“拔出插头”的实用方法。 到目前为止,我的想法大概是这样的:
byte[]
BitConverter.GetBytes
/
BitConverter.ToInt32
Encoding.UTF8.GetString()
在这里与数组开始的某种位置密切相关。就像数据报中的前4个字节包含msg一样,sessionid的startindex会变成4吗?所有这些都感觉很沉重。 有没有更好的方法来打包/解包这样的数组? 消息/数据报的最大大小为64kb,并且不会扩展到其他消息中。   更具体地说:我想模拟(即控制台应用程序)   传入数据包并解压缩到对我有用的信息   系统。然后相反,将答案传送回字节数组。   一个好的样本类别如何看起来/被处理?如何编码/   解码成吗?协议规范对数据包有固定的字节。我会离开   下面的例子(虽然不是真实的规范);
// One Packet 
// 
// Description   -> |Identifier|name length|message length|    name   |    message   |
// Size in bytes -> |     4    |     4     |       4      |name length|message length|
    

解决方法

        在大多数情况下,您自己不会读取/写入二进制信息。有几种框架可以将类/结构与二进制数据串行化。
BinaryFormatter
或protobuf是两种方式。 但是,如果您想自己尝试一下,我建议您只使用
FileStream
,因为它与任何其他流完全一样(有点简化的语句,但是几乎是正确的;)使用Use7ѭ编写信息,并使用
BinaryReader
进行读取。 没有理由直接处理“ 0”数组。您始终可以使用初始化
MemoryStream
,以访问
BinaryReader
BinaryWriter
重要的是您以完全相同的顺序读取/写入字段。 更新资料 使用更新的问题的示例:
// Description   -> |Identifier|name length|message length|    name   |    message   |
// Size in bytes -> |     4    |     4     |       4      |name length|message length|

using (var stream  = new MemoryStream(yourByteBuffer))
{
   using (reader = new BinaryReader(stream))
   {
       var identifier = reader.ReadInt32();
       var nameLength = reader.ReadInt32();
       var msgLength = reader.ReadInt32();
       var name = reader.ReadChars(nameLength);
       var msg = reader.ReadChars(msgLength);
   }
}

// to get a string from the chars:
var message = new string(msg);
    ,        ѭ14包含用于处理文件和字节流的类型。其中许多包括示例,例如。打开一个文件读取为字节流:FileStream构造函数(String,FileMode)。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-