我一直在尝试创建一个for循环,该循环将根据网络数据包的长度进行迭代。 API中通过event.packet-> dataLength存在一个变量(size_t)。我想从0迭代到event.packet-> dataLength-每次迭代7都会使i增加10,但是我遇到了麻烦。
我在寻找解决方案,但一直找不到有用的东西。我尝试将size_t转换为无符号的int并对其进行算术运算,但不幸的是它没有用。基本上我想要的是这样的:
for (int i = 0; i < event.packet->dataLength - 7; i+=10) { }
尽管每次我执行类似操作或尝试进行转换时,i
最佳答案
为什么不更改i
的类型?
for (size_t i = 0; i < event.packet->dataLength - 7; i+=10) { }
尝试使所有一起使用的变量的类型保持同一类型;应该避免强制转换。
C++ 03中没有
size_t
的格式说明符,您必须转换为最大的无符号整数类型并进行打印。 (C++ 0x中size_t
的格式说明符是%zu
)。但是,无论如何您都不应该使用printf
:std::cout << i; // print i, even if it's a size_t
尽管流可能更冗长,但它们的类型安全性更高,并且不需要您记住任何内容。
请记住,您的实际循环逻辑可能存在缺陷。 (如genpfault所述,当
dataLength - 7
为负数时会发生什么?)