Java中的C ++代码含义和转换

时间:2011-06-20 06:41:13

标签: java c++

我有C ++

char *s, mask;
// Some code

If(*s == 0){ //Some more code}

If(*s & mask){ //Some code}

在Java中,我可以像

一样编写
byte s,mask;
//Some code 
If(s == (byte)0x0){ //Some more code}   
If((s & mask) != (byte)0x0){ //Some Code} 

java代码是否正确?

5 个答案:

答案 0 :(得分:1)

在C ++中未定义的未初始化指针的默认值。您必须明确初始化它。在Java中,类型为byte的变量的默认值为0,除非它是局部变量,在这种情况下您也必须显式初始化它。

答案 1 :(得分:1)

C ++代码真的说if (*s == 0),还是真的说if (s == 0)?在第一个中,您将检查s指向的是0,而在第二个中,您正在检查s是否为空指针。这是两件非常不同的事情。

Java没有指针,因此无法直接将此代码转换为Java。

答案 2 :(得分:0)

在C ++中,此代码是未定义的行为:

If(*s == 0)  // 's' is not initialized

我认为在Java中,eclipse类型的编辑器可能会抱怨未初始化的s。在阅读之前用任何一种语言初始化变量是一种很好的做法。

答案 3 :(得分:0)

你想要做的最有可能的翻译(这看起来像某种低级解析;对于二进制字节数组的扫描,预期会出现'unsigned char'):

byte[] s; // with some kind of value
for (int i=0; i<s.Length; i++)
{
     if (s[i] == 0x0){ //Some more code}   
     if ((s[i] & mask) != 0x0){ //Some Code}
}

不受编译器的影响,我的java被多年的C ++和C#所淹没:)

答案 4 :(得分:0)

这应该等同于您的C ++代码:

    byte s[], mask;

    if (s[0] == 0) { /*Some more code*/ }

    if ((s[0] & mask) != 0) {/*Some code*/}

@sehe指出s可能会在C ++代码中获得递增 - 在这种情况下,s[0]应该在Java示例中更改为s[pos]

    byte s[], mask;
    // initialize s[] to store enough bytes
    int pos;
    if (s[pos = 0] == 0) { pos++; /* Some code */ }

    if ((s[pos] & mask) != 0) {/*Some code*/}