我有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代码是否正确?
答案 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*/}