1
Test test;
Mc_WriteUserData(McHandle, (unsigned char *)&test,  sizeof(test));

以上是c++函数的使用方式,我重点关注2ed arg的工作方式,想用java在android中模仿。以下是我的安卓代码。我在 toBytes() 函数中模仿它。并想像这样使用它:

Test test;
test.toByte();

但它不起作用,任何帮助表示赞赏!

final class Kits{
    public static byte[] intToByte(int number){
        byte[] bytes = new byte[4];
        bytes[0] = (byte) (number & 0xff);
        bytes[1] = (byte) ((number & 0xff00) >> 8);
        bytes[2] = (byte) ((number & 0xff0000) >> 16);
        bytes[3] = (byte) ((number & 0xff000000) >> 24);
        return bytes;
    }
    public static byte[] shortToByte(short number){
        byte[] bytes = new byte[2];
        bytes[0] = (byte) (number & 0xff);
        bytes[1] = (byte) ((number & 0xff00) >> 8);
        return bytes;
    }
}

class Point{
    int x;
    int y;
    int z;

    public byte[] toBytes(){
        byte[] bytes =  new byte[12];
        byte[] byte_4 = new byte[4];        
        byte_4 = Kits.intToByte(x);
        bytes[0] = byte_4[0];
        bytes[1] = byte_4[1];
        bytes[2] = byte_4[2];
        bytes[3] = byte_4[3];
        byte_4 = Kits.intToByte(y);
        bytes[4] = byte_4[0];
        bytes[5] = byte_4[1];
        bytes[6] = byte_4[2];
        bytes[7] = byte_4[3];
        byte_4 = Kits.intToByte(z);
        bytes[8] = byte_4[0];
        bytes[9] = byte_4[1];
        bytes[10] = byte_4[2];
        bytes[11] = byte_4[3];
        return bytes;
    }
}

public class Test {
    short u16size;          /* total class size */
    int u32crc;             /* checksum, accumulator total*/
    boolean bEnable;
    Point pisl[] = new Point[1];    
    byte u8DevType; 

    public byte[] toBytes(){
        byte[] bytes = new byte[19];
        byte[] byte_2 = new byte[2];
        byte[] byte_4 = new byte[4];
        byte[] byte_12 = new byte[12];
        byte_2 = Kits.shortToByte(this.u16size);
        bytes[0] = byte_2[0];
        bytes[1] = byte_2[1];
        byte_4 = Kits.intToByte(this.u32crc);
        bytes[2] = byte_4[0];
        //more repeat
        bytes[6] = this.bEnable ? (byte)1 : (byte)0;
        byte_12 = pisl[0].toBytes();
        bytes[7] = byte_12[0];
        //more repeat
        bytes[18] = byte_12[11];
        bytes[19] = u8DevType;  

        return bytes;
    }
    public static void main(String[] args) {        
        Test test = new Test();
        Mc_WriteUserData(test.toBytes(),  19);
    }   
}
4

1 回答 1

0

线

Test test;

不创建对象。它只创建一个空指针。

您需要改为使用:

Test test = new Test();

这将创建一个 Test 类的对象,并且 test 将指向该对象。

于 2013-07-26T03:54:05.523 回答