需要在Java中创建一个类,就像在C中创建一个结构一样
我有一个像这样的C结构需要在Java中创建一个类,就像在C中创建一个结构一样,java,c,structure,Java,C,Structure,我有一个像这样的C结构 typedef struct SKT_SubHeader_s { U32 subLength; U8 subCode; U8 subType; U8 subResult; U8 subCause; U8 subSrcMSISDN[RBT_SUBSCRIBER_NO_LEN]; U8 subDstMSISDN[RBT_SUBSCRIBER_NO_LEN];
typedef struct SKT_SubHeader_s
{
U32 subLength;
U8 subCode;
U8 subType;
U8 subResult;
U8 subCause;
U8 subSrcMSISDN[RBT_SUBSCRIBER_NO_LEN];
U8 subDstMSISDN[RBT_SUBSCRIBER_NO_LEN];
S8 subRsv[20];
S16 subSrvType;
S16 subSrvId;
S16 subSndType;
S16 subSndIdx;
S8 subSndCode[RBT_TONE_ID_LEN];
S8 subSndValue[RBT_TONE_ID_LEN];
S32 subMsgId;
U8 subBillFlag;
S16 subGroupOrder;
S8 subDate[9];
S8 subGroupName[31];
U8 subSpFlag;
S8 subBillCode[21];
S8 subReserve[30];
U32 bodyLength;
SKT_body_t bodyData[1];
}SKT_SubHeader_t;
我需要创建一个相同类型的java类,我可以从外部访问该类的值,并可以将其写入文件。在我看来,您只需要创建一个将这些数据类型作为公共变量的类。您可能还需要初始化构造函数中的变量
同样,在Java中,将此类中的变量设置为private并公开
getters
和setters
。在我看来,似乎只需要创建一个将这些数据类型作为公共变量的类。您可能还需要初始化构造函数中的变量
此外,在Java中,将此类中的变量设置为private并公开
getters
和setters
。创建此类的对象,您将能够访问每个成员
Main.java
Skt_Subheader_s SKT_SubHeader_t = new SKT_SubHeader_s;
SKT_SubHeader_t.subLength = 10;
SKT_分目_.java
public class SKT_SubHeader_s
{
public int subLength;
public byte subCode;
public byte subType;
public byte subResult;
public byte subCause;
public byte subSrcMSISDN[RBT_SUBSCRIBER_NO_LEN];
public byte subDstMSISDN[RBT_SUBSCRIBER_NO_LEN];
public byte subRsv[20];
public string subSrvType;
public string subSrvId;
public string subSndType;
public string subSndIdx;
public string subSndCode[RBT_TONE_ID_LEN];
public string subSndValue[RBT_TONE_ID_LEN];
public string subMsgId;
public byte subBillFlag;
public string subGroupOrder;
public string subDate[9];
public string subGroupName[31];
public byte subSpFlag;
public string subBillCode[21];
public byte subReserve[30];
public int bodyLength;
public SKT_body_t bodyData[1];
public SKT_Subheader_s()
{
//Constructor, Initialize your variables here
//e.g.
// sublength = 0;
//etc...
}
}
创建此类的对象,您将能够访问每个成员 Main.java
Skt_Subheader_s SKT_SubHeader_t = new SKT_SubHeader_s;
SKT_SubHeader_t.subLength = 10;
SKT_分目_.java
public class SKT_SubHeader_s
{
public int subLength;
public byte subCode;
public byte subType;
public byte subResult;
public byte subCause;
public byte subSrcMSISDN[RBT_SUBSCRIBER_NO_LEN];
public byte subDstMSISDN[RBT_SUBSCRIBER_NO_LEN];
public byte subRsv[20];
public string subSrvType;
public string subSrvId;
public string subSndType;
public string subSndIdx;
public string subSndCode[RBT_TONE_ID_LEN];
public string subSndValue[RBT_TONE_ID_LEN];
public string subMsgId;
public byte subBillFlag;
public string subGroupOrder;
public string subDate[9];
public string subGroupName[31];
public byte subSpFlag;
public string subBillCode[21];
public byte subReserve[30];
public int bodyLength;
public SKT_body_t bodyData[1];
public SKT_Subheader_s()
{
//Constructor, Initialize your variables here
//e.g.
// sublength = 0;
//etc...
}
}
Java没有与结构类似的
struct
。您必须创建一个类
来表示您的结构
。一个好的方法是创建一个。您的struct
元素成为私有字段,然后创建getter(和setter)方法来访问(修改)它们。您还应该为您的类创建一个合适的构造函数,具体取决于您希望如何初始化此类对象
关于基本数据类型的注意:我不能100%确定
U32
、U8
、S16
等在代码中表示什么,但您应该查看一下以确保能够正确映射它们。例如,请注意Java没有实现无符号整数(请参阅)。Java没有与struct
等价的东西。您必须创建一个类
来表示您的结构
。一个好的方法是创建一个。您的struct
元素成为私有字段,然后创建getter(和setter)方法来访问(修改)它们。您还应该为您的类创建一个合适的构造函数,具体取决于您希望如何初始化此类对象
关于基本数据类型的注意:我不能100%确定
U32
、U8
、S16
等在代码中表示什么,但您应该查看一下以确保能够正确映射它们。例如,请注意Java不实现无符号整数(请参阅)。您需要的是一个具有公共成员的Java类。您需要的是一个具有公共成员的Java类。也许您可以简单地使用字节[]
数组来存储此结构化数据,然后使用java.nio.ByteBuffer
来包装和操作它。也许你可以简单地使用byte[]
数组来存储这个结构化数据,然后使用java.nio.ByteBuffer
来包装和操作它。请阅读或查看文本区域右侧的“如何格式化”框,以了解如何正确格式化代码(只需将其缩进四个空格)。不需要任何HTML标记。你正在使用的数据类型是什么?你也会在Java上使用它们吗?@felix我尝试过创建一个类,但没有成功,如果你有任何建议,请给我。请编辑你的帖子,添加你尝试用于该类的代码以及可能出现的任何编译器错误。@Argots这就是我为什么要ave在这个论坛上发布了这个问题,不,我不知道这些数据类型在java中是否可行。如果这些数据类型在java中不可行,那么如何处理这个问题?请阅读或查看文本区域右侧的“如何格式化”框,以了解如何正确格式化代码(只需用四个空格缩进)。不需要任何HTML标记。你正在使用的数据类型是什么?你也会在Java上使用它们吗?@felix我尝试过创建一个类,但没有成功,如果你有任何建议,请给我。请编辑你的帖子,添加你尝试用于该类的代码以及可能出现的任何编译器错误。@Argots这就是我为什么要ave在这个论坛上发布了这个问题,不,我不知道这些数据类型在java中是否可能。如果这些数据类型在java中不可能,那么如何处理这个问题?对不起,在java中不可能有这种类型的数据类型java@Abhisek当使用不同的语言时,您有时需要选择该语言本机的等效类型y你可以用string替换S8、S16和S32;用short替换U8和U16,用unsigned int替换U32。这个网站将帮助你选择合适的类型。为什么你要用string替换S8、S16和S32?当然你会用byte、short和int替换它们?这可以编译吗?很抱歉,这种类型的数据类型在java@Abhisek使用时另一种语言您有时需要选择该语言固有的等效类型,您可以将S8、S16和S32替换为字符串;将U8和U16替换为short,将U32替换为unsigned int。此网站将帮助您选择合适的类型。为什么要将S8、S16和S32替换为string?当然,您会将它们替换为byte、short和int?是否编译?Eamonn发布的内容应该让您开始。但是,您需要决定将哪个本机Java数据类型用于U32
、U8
等等,正如MarcoS提到的。Eamonn发布的内容应该让您开始。但是,您需要决定将哪个本机Java数据类型用于U32
、U8
等等n正如MarcoS提到的。我想知道谁和为什么否决我的答案。如果我的答案不正确,请指出,我会纠正它,我感谢你的帮助。如果答案正确,请向上投票!我可以猜出为什么你会得到否决票。一旦你将字节[]
使用字节缓冲的数组
,您将有额外的开销。T