首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中读取VB 6二进制文件

在C#中读取VB 6二进制文件
EN

Stack Overflow用户
提问于 2014-12-09 01:58:47
回答 1查看 847关注 0票数 1

我有一个由VB6应用程序编写的二进制文件,现在我想使用C#应用程序来读取VB6导出的二进制文件。我已经在我的Microsoft.VisualBasic.dll项目中使用了C#。

然而,C#应用程序中存在一些数据不一致的地方,但是我已经在VB.net中检查了它,而且它也运行得很好。(我从VB6转换为VB.net,然后将VB.net转换为C#)

屏幕截图表示使用C#和VB.Net应用程序读取二进制文件的结果。VB.Net是我期望的结果,现在我的C#应用程序显示出了不一致的结果。

在C#和VB.NET中,两者都是双值,根据我的观察,int字符串值看起来很好。

在C# i使用如下所示的语句中,BinaryDetails是结构的,而内部只有很少的双变量

代码语言:javascript
复制
ValueType DetailsValueType = (ValueType)BinaryDetails;
FileSystem.FileOpen(FileNumber, FileName, OpenMode.Binary, OpenAccess.Read);
FileSystem.FileGet(FileNumber, ref DetailsValueType);

我已经将C#中的数据类型从double更改为float,但这不是我预期的结果:

EN

回答 1

Stack Overflow用户

发布于 2014-12-09 09:01:46

你可以用一个小小的测试程序来逆向工程这样的事故:

代码语言:javascript
复制
class Program {
    static void Main(string[] args) {
        var value1 = 3.49563395756763E-310;
        var bytes1 = BitConverter.GetBytes(value1);
        Console.WriteLine(BitConverter.ToString(bytes1));
        var value2 = 101.325;
        var bytes2 = BitConverter.GetBytes(value2);
        Console.WriteLine(BitConverter.ToString(bytes2));
    }
}

输出:

代码语言:javascript
复制
CC-CC-CC-54-59-40-00-00
CD-CC-CC-CC-CC-54-59-40

请注意,您确实在正确的轨道上,您正在从文件中读取正确的字节值。这些双打有CC-54-59-40的共同点。只是你读取的数据不对齐。你开始读的太晚了,只读了两个字节。

这是因为您的BinaryDetails与文件中的数据并不完全匹配。请记住,您必须假设文件包含VB6数据类型。它们与C#类型略有不同:

  • VB6文件数据被严格打包,您需要[StructLayout(LayoutKind.Sequential, Pack = 1)]
  • VB6整数是C# short
  • VB6 Long是C# int
  • VB6布尔值是具有-1 = True,0=False的C# short
  • VB6字符串有固定的宽度,您需要将它们读取为byte[]

应该足以解决这个问题。当然,请记住,从VB.NET程序中使用C#程序集非常简单。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27370259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档