Java中C++代码的含义和转换
C++ code meaning and conversion in Java
我在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*/}
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 将无符号char*转换为std::istream*C++