c++中结构和指针的语法,相当于Java
Syntax for Structure and Pointers in C++ equivalent for Java
这里有我的一部分代码。有2个简单的结构,稍后在。cpp Send()方法中使用。
//In the header file I have
#define P32 (unsigned int)
#define P16 (unsigned short)
#define P8 (unsigned char)
struct nd {
P8 p;
P8 c;
P16 l;
};
struct HELLO {
P32 a1;
P32 a2;
P8 a3;
};
//In the .cpp I have
void Send()
{
DWORD dw = nd_s + sizeof( HELLO);
BYTE *HelloPac=new BYTE[dw];
nd *HelloHr=(nd*)HelloPac;
HELLO* _Hello=(HELLO*)(HelloPac+nd_s);
HelloHr->c=0x10;
HelloHr->p=0x09;
Hellohr->l=36;
_HELLO->a1=6001;
_HELLO->a2=0
_HELLO->a3=120;
//my own read write function
streamReadWrite->Write(HelloPac, dw);
}
我正在用Java编写相同的代码(移植代码)。我很困惑,因为我没有在Java中做过很多编码,因为Java没有指针,没有结构,没有无符号整数,我不知道上面代码的语法是如何的。下面是我得到的,但是t抛出语法错误:
public class abc {
private static final int nd_s = 4; //hard-coded
public class nd
{
public byte p;
public byte c;
public short l;
}
public class HELLO
{
public int a1;
public int a2;
public byte a3;
}
private void Send()
{
int dw = nd_s + 30;
byte[] HelloPac = new byte[dw];
nd HelloHr = (nd)HelloPac;
HELLO _Hello = (HELLO)(HelloPac + nd_s);
}
}
我在类型转换中哪里出错了?
不能将对象HelloPac
(其类型为字节数组)强制转换为类型nd
。
如果你想创建一个由HelloPac的值初始化的nd
实例,使用构造函数:
public class nd
{
...
public nd (byte[] input)
{
// initialize the members here
}
...
}
...
nd HelloHr = new nd (HelloPac);
顺便说一句,如果你要用Java编码,请使用Java的命名约定:类名用大写,变量名用驼角大写。
对特定对象的引用在Java中充当指向该对象的指针,但与C/c++不同,它不支持指针运算。
HELLO hello1 = new HELLO();
//Put values
hello1.a1 = 5
//You should not use public variables, make them private and use getter/setter
....
HELLO hello2 = new HELLO();
//Put values
hello2.a1 = 15
....
这里hello1和hello2是对我们创建的HELLO类型对象的引用。
如果要按顺序存储对所有HELLO对象的引用,可以将它们存储在HELLO类型的Array中。
HELLO[] helloArray = new HELLO[10];
helloArray [0] = hello1;
helloArray [1] = hello2;
可以通过遍历数组来浏览对象。
或者你可以使用链表
public class HELLO
{
HELLO nextHallo; // Store reference to next hello object.
public int a1;
public int a2;
public byte a3;
}
HELLO hello1 = new HELLO();
hello1.a1 = 5 (Ideally you should not have public variables)
....
HELLO hello2 = new HELLO();
hello2.a1 = 15
..........
hello1。
浏览链表中的所有hello对象-
HELLO helloReference = hello1; //Reference to first object
while(helloReference!=null)
{
helloReference = helloReference.nextHallo ;
performSomeOperation(helloReference)
}
更新OP关于如何创建nd实例的问题,该实例由HelloPac的值初始化:
byte[] HelloPac = new byte[dw];
nd instance = new nd();
//HelloPac[0] is first byte
nd.p=HelloPac[0]; // Ideally should be done inside constructor of nd
nd.c = HelloPac[1]; //2nd byte
nd。l是一个长度为2字节的short,所以我们需要将两个字节组合起来HelloPac[2] &HelloPac[3]获取短值并赋值给nd.l.
这可以通过以下方式完成- 2字节转换为短java或从2或4字节转换为有符号/无符号短/int
注意:通常我们会使用内置的集合,如ArrayList和LinkedList来表示相同的java。这里提供的代码片段不遵循首选的java编码标准。
在类中使用构造函数将类中的对象初始化为您想要设置的值。
要做到这一点:nd HelloHr = (nd)HelloPac;
在类Nd中添加这个构造函数
public class Nd
{
public byte p;
public byte c;
public short l;
List<Byte> byteList;
public Nd( Byte[] byteArray)
{
byteList = new List<Byte>;
for(Byte byte : byteArray)
byteList.add(byte)
}
}
或者构造函数中类似的逻辑
对Hello赋值执行类似的逻辑
- 相当于LocaleMatcher的ICU4C
- 相当于 pybind11 中的 boost::p ython py::scope().attr()
- C++相当于整数的 #define
- 什么相当于 Kotlin 上的C++指针?
- 相当于 Java 中的C++结构
- 霓虹灯中的_mm_hadd_ps相当于什么?
- 相当于 VirtualAlloc() 的_set_new_handler?
- 对于 poco 库来说,Boost_USE_STATIC_LIBS相当于什么?
- 什么 clang-format 相当于 rustfmt 的 indent_style=Block?
- 犰狳相当于 A(find(A<0)) = 0
- 相当于C++运算符中的 Python
- C++ C 的双指针相当于什么?
- 相当于Linux fifo的Windows
- 相当于numpy.exexpand_dims()和numpy.contenate()的C++
- 从 MATLAB 到 C++:相当于带有选项 'remove' 的 bwmorph
- Visual Studio 编译器的 record-gcc-switch 相当于什么?
- 相当于Windows/MSVC上的段错误?
- C++相当于Python的__init__
- OpenCV absdiff 相当于从 c++ 到 Python
- c++中结构和指针的语法,相当于Java