Jea*_*OTF 8 c++ integer size-t
我一直在尝试创建一个for循环,它将根据网络数据包的长度进行迭代.在API中,event.packet-> dataLength存在变量(size_t).我想迭代从0到event.packet-> dataLength - 7每次迭代时我增加10但我有一个麻烦的世界.
我寻找解决方案,但一直找不到任何有用的东西.我尝试将size_t转换为unsigned int并使用它进行算术但不幸的是它没有用.基本上我只想要这样:
for (int i = 0; i < event.packet->dataLength - 7; i+=10) { }
Run Code Online (Sandbox Code Playgroud)
虽然每次我做这样的事情或尝试我的转换时,我<#part都是一个巨大的数字.他们在API的教程中给出了printf语句,该API使用"%u"来打印实际数字,但是当我将它转换为unsigned int时,它仍然是不正确的.我不知道从哪里开始.任何帮助将不胜感激 :)
为什么不改变类型呢i?
for (size_t i = 0; i < event.packet->dataLength - 7; i+=10) { }
Run Code Online (Sandbox Code Playgroud)
尽量保持一起使用的所有变量的类型相同;应避免强制转换。
C++03 中没有格式说明符size_t,您必须转换为最大的无符号整数类型并打印它。size_t( C++0x 中的格式说明符是%zu)。但是,您无论如何都不应该使用printf:
std::cout << i; // print i, even if it's a size_t
Run Code Online (Sandbox Code Playgroud)
虽然流可能更冗长,但它们类型更安全,并且不需要您记住任何内容。
请记住,您的实际循环逻辑可能有缺陷。(正如 genpfault 所指出的,当dataLength - 7负数时会发生什么?)