我正在编写一个 websocket 服务器,我必须处理需要取消屏蔽的屏蔽数据。
掩码是 unsigned char[4],数据也是 unsigned char* 缓冲区。
我不想逐字节异或,我更愿意一次异或 4 个字节。
uint32_t * const end = reinterpret_cast<uint32_t *>(data_+length);
for(uint32_t *i = reinterpret_cast<uint32_t *>(data_); i != end; ++i) {
*i ^= mask_;
}
在这种情况下使用 reinterpret_cast 有什么问题吗?
替代方案是以下代码,它不那么清晰且不那么快:
uint64_t j = 0;
uint8_t *end = data_+length;
for(uint8_t *i = data_; i != end; ++i,++j) {
*i ^= mask_[j % 4];
}
我对替代方案很感兴趣,包括依赖于 c++11 功能的替代方案。