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

C++ code meaning and conversion in Java

本文关键字:转换 C++ 代码 Java      更新时间:2023-10-16

我在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代码正确吗?

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

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

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

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

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

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

您最想做的翻译(这看起来像某种低级解析;对于二进制字节数组的扫描,应该是"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}
}

未受compiles影响,我的java被多年的C++和C#淹没:)

这应该相当于您的C++代码:

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

@他指出,在C++代码中,s可能会被递增——在这种情况下,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*/}