java到C/C++;(硬质合金c/c+;+;)对话

java到C/C++;(硬质合金c/c+;+;)对话,java,c++,c,symbian,Java,C++,C,Symbian,在Java中: 数值=1122 public static final byte[] intToByteArray(int value) { return new byte[] { (byte)(value >>> 24), (byte)(value >>> 16), (byte)(value >>> 8),

在Java中:

数值=1122

public static final byte[] intToByteArray(int value) {
        return new byte[] {
                (byte)(value >>> 24),
                (byte)(value >>> 16),
                (byte)(value >>> 8),
                (byte)value};
    }

  public static int byteArrayToInt(byte[] data) {
        return (int)(
                (int)(0xff & data[0]) << 24  |
                (int)(0xff & data[1]) << 16  |
                (int)(0xff & data[2]) << 8   |
                (int)(0xff & data[3]) << 0
        );
    }
由于c中没有字节数据类型,我们可以使用char*来代替它,但是当我返回temp值时,我得到了null,所以我检查了这样的值,其中=b\x04'b'=98,x04=4,我无法得到为零的数据,所以在转换回时,我应该如何管理剩余的值

         char* where = new char[10];
         where[0] = temp[3];
         where[1] = temp[2];
         where[2] = temp[1];
         where[3] = temp[0];
         where[4] = 0;
我正在变空

不,你不是。您得到的第一个字节是
\0
nul字节。当您将其打印为文本字符串时,它将终止该字符串。但它不是一个字符串,而是一个字节数组


如果你得到的是空值,你会得到一个分段错误或类似的错误。

虽然上面的文章是绝对正确的,但是你的移植工作还有一个更严重的问题。您的java生成

[ 0, 0, 4, 98 ]
当你的C产生

[ 98, 4, 0, 0 ]

这样简单地转换代码就不起作用了。不管硬件如何,Java都是大端的,但毫不奇怪,您的C(++)是低端的。更糟糕的是,你不能保证每次都是这样。有了Carbide,我想你完全可以偶然发现一个big endian架构(一些ARMs?不是这个领域的专家)。因此,您必须选择或,用增量模256替换位移位。取决于调用函数的频率。模将认真对待处理器的更多工作,但不关心尾数。

很抱歉获取\x00值,但剩余值如何获取并存储在数组中呢。这里只有我面临的困难。您可以像数组一样获取具有
字节[0]
字节[1]
字节[2]和
字节[3]
的值。。)像这样我可以得到所有的值int tt=temp[0];int tt1=温度[1];int tt2=温度[2];int tt3=温度[3];但我无法将所有这些值以字节形式存储在数组中:(.是否可以这样存储\x00\x00\x04\x98?
char*
是指向字节数组的指针。
temp
不是将所有这些值都作为字节存储在数组中。我不确定您的问题是什么,但这段代码对我来说很好。temp和where的值都设置正确。您确定使用了“==”吗运算符。我不明白为什么不能执行“where[3]==0”。没有理由不能获取0的数据。对不起,实际上c也只能生成类似java的数据,但起始值是零,所以我无法看到其他值,我使用上面代码中提到的其他变量将其反转。
[ 98, 4, 0, 0 ]