将不同的结构复制到字节数组

2023-12-24

我正在将旧的 Visual BASIC 程序转换为 C#。该程序通过串行或以太网线路向某些工业机械发送消息。为此,它创建消息的字节数组。

问题是有MANY(~50) 种不同的消息格式,每种格式在 VB6 中定义为用户定义类型。例如。

Public Type K_QCHECK
    Header As K_HEADER3
    Count As LNG4
    crc As INT2
End Type

(LNG4 和 INT2 是自定义类型)通过自动翻译工具运行 VB6 代码,我得到一个 C# 结构:

public struct K_QCHECK
{
     public K_HEADER3 Header;
     public LNG4 Count;
     public INT2 crc;
}

但旧的 VB6 代码使用 LSet 将这些复制到字节数组中。这取决于类型代表连续的内存块的假设。但在 C# 中,编译器在内存中布置内容的方式应该是程序员无法访问的实现细节。

那么将这些不同结构的内容放入字节数组的最佳方法是什么?我可以将每个类都创建为一个类,并为其提供一个 CopyToByteArray 方法或运算符,但其中有 50 个,因此看起来工作量很大。在此先感谢您的任何建议!


这可能不是正确的解决方案,但是有一个 StructLayoutAttribute 可以让您显式定义结构在内存中的布局方式。

http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.structlayoutattribute%28v=vs.110%29.aspx http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.structlayoutattribute%28v=vs.110%29.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将不同的结构复制到字节数组 的相关文章

随机推荐

  • Android Studio - processDebugResources 失败

    所以我尝试在 Android Studio 中构建我的项目 但是每次加载或执行该项目时 我都会收到以下错误 我不知道如何解决这个问题 Execution failed for task oefening1 processDebugResou
  • Visual Studio 2012 C++ 你好世界 - iostream 不工作

    我对 Visual Studio 2012 有疑问 我还在使用 Sams Teach Yourself C in One Hour a day 7th Edition 在使用 google 找到 最佳 C 编译器之后 Visual Stud
  • Typescript 数组接口,具有编号索引和可通过字符串键访问的自定义属性

    我想要一个按数字索引的对象数组 并将数组上的所有对象放在特定键下 像这样的事情 const myArray ICustomArray myArray push item myArray item key item 但我正在努力定义它的界面
  • android:市场活动的反应

    我正在尝试制作一个应用程序 打开所选应用程序的 Android 市场页面并让用户下载它 我已使用以下意图来打开市场 Intent intent new Intent Intent ACTION VIEW intent setData Uri
  • 带有ContinueWith的TaskCanceledException

    我一直在试图找出为什么最近开始出现异常的一些异步代码会出现 TaskCanceledException 异常 我已将问题简化为一个让我摸不着头脑的小代码片段 static void Main string args RunTest priv
  • 在 PHP array_walk 中按引用传递第三个参数,没有警告

    有没有办法让这段代码在没有警告的情况下工作 function myFunction value key array if strlen value lt 2 array key value a array aa bbb cc dd resu
  • Angular CLI 插件

    Ember CLI 有一个命令 ember addon
  • 在 Android 中结束通话

    我试图在几秒钟后结束新的拨出呼叫 这是我的代码 public class phonecalls extends Activity ComponentName cn Called when the activity is first crea
  • 构建类似 Facebook 的个性化新闻源:SQL、MongoDB?

    我正在构建一个类似 Facebook 的新闻源 这意味着它是由许多 SQL 表构建的 并且每种数据类型都有特定的布局 但它的负载变得非常重 我希望让它变得更加复杂 这就是我现在所做的 用户模型 def updates more option
  • 将表情符号添加到 Hugo 页面变量

    如何将表情符号添加到 Hugo 页面变量 例如 在以下代码片段的标题中 date 2016 11 20T12 00 00 draft false tags Fun title Went sporting heart Hugo 有两种处理表情
  • 在 ruby​​ on Rails 中包含 httparty 时出现问题

    我一直在尝试在我的 Rails 代码中使用 HTTParty sudo gem install httparty 从命令行我现在可以成功地执行 httparty http twitter com statuses public timeli
  • 如何在 PostgreSQL 中进行仅模式备份和恢复?

    如何在 PostgreSQL 数据库中进行架构级备份并在另一个数据库上恢复 有没有可用的单个命令 例如 我可以在单行中进行 pg dump 和恢复吗 pg dump schema masters oldDB gt masters1 sql
  • 如何正确缓存我的 Symfony2 API?

    我正在 Symfony2 上制作经典的无状态 RESTfull API 用户 应用程序在身份验证 API 上获取身份验证令牌 并将其提供给所有其他 API 进行记录并发布数据 访问其他 API 上的受保护 私有 个人数据 我现在对这个工作流
  • 没有 $unwind 的 $group 内部数组值

    我想按指定字段的相同值对数组中的对象进行分组并生成计数 我有以下 mongodb 文档 不存在不相关字段 arrayField fieldA value1 otherFields fieldA value2 otherFields fiel
  • 如何创建收益递减的公式?

    我想这是一个数学问题 而不是一个编程问题 但是创建收益递减公式的好方法是什么 以下是一些关于我希望曲线看起来如何的示例点 f 1 1 f 1 5 98 f 2 95 f 2 5 9 f 3 8 f 4 7 f 5 6 f 10 5 f 20
  • 对相关包进行排序

    我有一个 Pig 脚本 它生成了一个关系 A x chararray B y chararray z int 我想根据 B y 对 A 进行排序 但是以下代码给了我错误 语法错误 z 处或附近出现意外符号 output foreach A
  • 用户代理标头 - mysql 存储的缩写

    根据这个帖子 特别是这篇文章 https stackoverflow com a 6595973 1125465 https stackoverflow com a 6595973 1125465 微软一如既往地炫耀 用户代理的大小可能非常
  • 在范围内找不到类型 GIDSignInDelegate

    如下所示 我收到这些错误 我已经安装了 Firebase 和 GoogleSignIn 我做错了什么 正如克里斯在评论中指出的那样 请遵循迁移指南 https developers google com identity sign in i
  • DotNetNuke——所有登录都在任何地方被跟踪吗?

    我知道您可以在 用户 表的 LastModifiedOnDate 列中找到用户上次登录的时间 但我有兴趣查找用户登录时时间戳的完整历史记录 这可能吗 如果是这样 该信息存储在哪个表中 Thanks 日志查看器中存储了一个事件 即EventL
  • 将不同的结构复制到字节数组

    我正在将旧的 Visual BASIC 程序转换为 C 该程序通过串行或以太网线路向某些工业机械发送消息 为此 它创建消息的字节数组 问题是有MANY 50 种不同的消息格式 每种格式在 VB6 中定义为用户定义类型 例如 Public T