我有这段代码,目的是确定收到的数据包是否有效:
size_t offset_to_a, offset_to_b;
u_int32_t file_name_length;
u_int32_t packet_length;
if ((offset_to_a + offset_to_b + file_name_length) > packet_length) {
// Invalid packet
}
size_t
可能是u_int64_t
因为cpu是64位的。
现在,当file_name_length
有一个值0xFFFFFFFF
(无效)时,则认为该数据包无效。
但是如果因为底层架构而size_t
成为,那么对于相同的值,条件失败,因为值会回绕,并且数据包被认为是有效的。u_int32_t
file_name_length
我怎样才能使这个条件足够通用以在 32/64 位架构上工作?
谢谢!