我一直在尝试创建一个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为负数时会发生什么?)

10-08 11:11