F#中的C语言struct ???? [英] C language struct in F# ????

查看:77
本文介绍了F#中的C语言struct ????的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的C语言结构如下

 struct HEADERCASH
    {
	    char  Reserved[12];
	    long  LogTime;
	    char  AlphaChar[2];
	    short TransactionCode;
	    short ErrorCode;
	    char  Reserved1[8];
	    char  TimeStamp1[8];
	    char  TimeStamp2[8];
	    short MessageLength;
    };

如何在F#中实现上述结构?

How can I implement the above struct in F#???

谢谢.

推荐答案

遵循这些原则

[<Struct; StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)>] type HEADERCASH [<MarshalAs(UnmanagedType.ByValArray, SizeConst=12)>] val mutable Reserved : byte [] val mutable LogTime : int32 [<MarshalAs(UnmanagedType.ByValTStr, SizeConst=2)>] val mutable AlphaChar : String val mutable TransactionCode : int16 val mutable ErrorCode : int16 [<MarshalAs(UnmanagedType.ByValArray, SizeConst=8)>] val mutable Reserved1 : byte [] [<MarshalAs(UnmanagedType.ByValArray, SizeConst=8)>] val mutable TimeStamp1 : byte [] [<MarshalAs(UnmanagedType.ByValArray, SizeConst=8)>] val mutable TimeStamp2 : byte [] val mutable MessageLength : int16

在这里,我假设只有AlphaChar具有单字节字符的类似字符串的语义.根据TimeStamp值的不同,可以将它们更好地表示为int64值(不需要MarshalAs)或字符串,但实际上 对此没有任何假设.

where I've assumed that only AlphaChar has string-like semantics with single-byte characters.  Depending on what the TimeStamp values are, those may be better represented as either as int64 values (no MarshalAs required) or as strings, but as it is I've made no assumption about those.


这篇关于F#中的C语言struct ????的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆