0

我正在尝试将库从 C++ 转换为 Java。指针有问题。。

来自 C++ 的代码是:

int DECL2 daveSetBit(daveConnection * dc,int area, int DB, int byteAdr, int bitAdr) {
    int a=1;
    return daveWriteBits(dc, area, DB, 8*byteAdr+bitAdr, 1, &a);
} 

和 daveWriteBits 声明是:

 daveWriteBits(daveConnection * dc,int area, int DB, int start, int len, void * buffer)

我怎样才能把它转换成java?我不知道如何将指针&a转换为 java 语言..

public int SetBits(
        int area,
        int DBnum,
        int byteAdr,
        int bitAdr) {       
    int a=1;        
    return writeBits(area, DBnum, 8*byteAdr+bitAdr, 1, ??? )            
}

更新:

我忘了在 Java 中添加部分 WriteBits 函数。

public int writeBits(
        int area,
        int DBnum,
        int start,
        int len,
        byte[] buffer) {
        int errorState = 0;
        semaphore.enter();
        PDU p1 = new PDU(msgOut, PDUstartOut);

        p1.prepareWriteRequest();
        p1.addBitVarToWriteRequest(area, DBnum, start, len, buffer);

        errorState = exchange(p1);

        if (errorState == 0) {
            PDU p2 = new PDU(msgIn, PDUstartIn);
            p2.setupReceivedPDU();

            if (p2.mem[p2.param + 0] == PDU.FUNC_WRITE) {
                if (p2.mem[p2.data + 0] == (byte) 0xFF) {
                    if ((Nodave.Debug & Nodave.DEBUG_CONN) != 0)
                        System.out.println("writeBytes: success");
                    semaphore.leave();
                    return 0;
                }
            } else {
                errorState |= 4096;
            }
        }
        semaphore.leave();
        return errorState;
    }
4

4 回答 4

1

由于变量被忽略,我会删除它。

但是,如果它没有被忽视,你可以起诉

int[] a = { 1 };
writeBits(area, DBnum, 8*byteAdr+bitAdr, 1, a )  ;
// do something with a[0];
于 2012-08-09T14:32:35.887 回答
0

Java没有指针。它有参考:

C++:

Object *a=new Object();

爪哇:

Object a=new Object();
于 2012-08-09T14:34:14.213 回答
0

这取决于如何daveWriteBits使用buffer. 如果它只是被视为一个简单的整数,并且如果daveSetBit不使用a此调用后的值,则将其设为int. 没有指针/引用。

如果daveSetBit需要a( 在 中的任何潜在修改之后的值daveWriteBits,那么制作 anInteger可能会有所帮助。

如果有一些非常花哨的指针东西(将&a自己视为地址等),那么您可能需要做更多的设计。

于 2012-08-09T14:34:37.200 回答
0

您更熟悉 C++ 还是 Java?C++ 代码将整数视为字节数组。您不能直接在 Java 中执行此操作(我认为),但您可以执行此操作

ByteArrayOutputStream buf = new ByteArrayOutputStream();
new DataOutputStream(buf).write(a);
return writeBits(area, DBnum, 8*byteAdr+bitAdr, 1, buf );

将整数转换为字节数组,然后您可以将其传递给 writeBits。未经测试的代码。

于 2012-08-09T14:35:06.687 回答