C++结构体和类转换C#代码

kinglucifa 2013-09-15 03:35:18
由于数据存储格式要和 以前的软件兼容,下面是以前软件的C语言代码。谁知道怎么转换成C#的呀?
这是结构体
struct CStationTable1Data
{
CStationTable1Data();
char StationName[60];
char StationNumber[10];
};
这是文件输出的
outfile.Write((char *)&StationTable1Data,sizeof(StationTable1Data));

这是C中定义的类
class CSondeDataType
{
public:
CSondeDataType();//构造函数
CSondeDataType(int a,
double t,
double e,
double p,
double h);
CSondeDataType& operator=(const CSondeDataType& sdt);
int operator==(const CSondeDataType& sdt) const;
int operator<(const CSondeDataType& sdt) const;

int availability;
double time;
double temp;
double press;
double humi;
};
谁知道的麻烦帮帮我,谢谢了。
...全文
463 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2013-09-16
  • 打赏
  • 举报
回复
引用 8 楼 kinglucifa 的回复:
[quote=引用 3 楼 caozhy 的回复:] [StructLayout(LayoutKind.Explicit, Size=70, CharSet=CharSet.Ansi)] struct CStationTable1Data { [FieldOffset(0)] public char[] StationName; [FieldOffset(60)] public char[] StationNumber; } 类没法转
C中的CStationTable1Data结构体我只贴出来2个类型定义,后面还有很多。 继续往下是不是这样写?根据上一个字段的大小,写下一个字段的偏移量。 [FieldOffset(70)] public char[] AA; [FieldOffset(80)] public char[] BB;[/quote] 对的。
kinglucifa 2013-09-16
  • 打赏
  • 举报
回复
引用 13 楼 Saleayas 的回复:
自己一个字段一个字段的写入。 使用 BitConvert转换成 byte[]. 然后写入流 。 需要注意的是,C++ 的代码兼容不好,没有 pack 标识。
请问怎么一个字段一个字段的写入啊?类那块又怎么办呢?
kinglucifa 2013-09-16
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
[StructLayout(LayoutKind.Explicit, Size=70, CharSet=CharSet.Ansi)] struct CStationTable1Data { [FieldOffset(0)] public char[] StationName; [FieldOffset(60)] public char[] StationNumber; } 类没法转
编译出错提示:在 70偏移位置处包含一个对象字段,该字段已由一个非对象字段不正确地对齐或重叠。。这是什么原因啊?但是我新建测试项目,复制这个结构体进去,能通过编译,不出错。
Saleayas 2013-09-16
  • 打赏
  • 举报
回复
自己一个字段一个字段的写入。 使用 BitConvert转换成 byte[]. 然后写入流 。 需要注意的是,C++ 的代码兼容不好,没有 pack 标识。
kinglucifa 2013-09-16
  • 打赏
  • 举报
回复
求解答呀。。。。纠结死我了。。。
kinglucifa 2013-09-16
  • 打赏
  • 举报
回复
谁知道怎么做的?帮帮我啊。。。
kinglucifa 2013-09-15
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
[StructLayout(LayoutKind.Explicit, Size=70, CharSet=CharSet.Ansi)] struct CStationTable1Data { [FieldOffset(0)] public char[] StationName; [FieldOffset(60)] public char[] StationNumber; } 类没法转
C中的CStationTable1Data结构体我只贴出来2个类型定义,后面还有很多。 继续往下是不是这样写?根据上一个字段的大小,写下一个字段的偏移量。 [FieldOffset(70)] public char[] AA; [FieldOffset(80)] public char[] BB;
kinglucifa 2013-09-15
  • 打赏
  • 举报
回复
引用 6 楼 caozhy 的回复:
因为C# C++实现机制的差异的关系,无法做到二进制兼容。 而且C++也没有办法访问托管的内存。
谢谢版主,原C程序中定义CSondeDataType 类,我觉得主要还是要实现文件输出。下面是代码: for( i=0;i<=IntegrateclientWindow.SondeDataArray.GetUpperBound ();i++) { SondeDataType=IntegrateclientWindow.SondeDataArray.GetAt (i); outfile.Write((char *)&SondeDataType,sizeof(SondeDataType)); } 在C#中要想生成相同的文件该怎么写?
threenewbee 2013-09-15
  • 打赏
  • 举报
回复
引用 4 楼 kinglucifa 的回复:
类为什么没法转呀?C我实在是不懂,看不懂什么意思,特别是指针那一块。。。
因为C# C++实现机制的差异的关系,无法做到二进制兼容。 而且C++也没有办法访问托管的内存。
kinglucifa 2013-09-15
  • 打赏
  • 举报
回复
还有文件输出那块怎么写呀?
kinglucifa 2013-09-15
  • 打赏
  • 举报
回复
类为什么没法转呀?C我实在是不懂,看不懂什么意思,特别是指针那一块。。。
threenewbee 2013-09-15
  • 打赏
  • 举报
回复
[StructLayout(LayoutKind.Explicit, Size=70, CharSet=CharSet.Ansi)] struct CStationTable1Data { [FieldOffset(0)] public char[] StationName; [FieldOffset(60)] public char[] StationNumber; } 类没法转
kinglucifa 2013-09-15
  • 打赏
  • 举报
回复
结构不能包含显式的无参数构造函数
wanderingies 2013-09-15
  • 打赏
  • 举报
回复
using System; struct CStationTable1Data { CStationTable1Data(); char[] StationName; // 60 bits char[] StationNumber; // 10 bits } public class CSondeDataType { int availability; double time; double temp; double press; double humi; public CSondeDataType() { } public CSondeDataType(int a, double t, double e, double p, double h) { } } /* 这里的你要贴出你要扩展的方法 * CSondeDataType& operator=(const CSondeDataType& sdt); int operator == (const CSondeDataType& sdt) const; int operator < (const CSondeDataType& sdt) const; * */

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧