我目前正在尝试为开源服务器实施Google身份验证器,并且他们有一小段代码
if (securityFlags & 0x01) // PIN input
{
pkt << uint32(0);
pkt << uint64(0) << uint64(0); // 16 bytes hash?
// This triggers the 2 factor authenticator entry to popup on the client side
}
if (securityFlags & 0x02) // Matrix input
{
pkt << uint8(0);
pkt << uint8(0);
pkt << uint8(0);
pkt << uint8(0);
pkt << uint64(0);
}
if (securityFlags & 0x04) // Security token input
{
pkt << uint8(1);
}
我只想弄清楚他们使用pkt << uint32(0)
的原因,因为它们对我来说似乎完全是多余的。而且他们也经常使用它,这就更没意义了。
为什么他们的代码是这样写的?
答案 0 :(得分:11)
运营商LT;&LT;为ByteBuffer重载(这是一个pkt类型),它看起来如下:
ByteBuffer& operator<<(uint8 value)
{
append<uint8>(value);
return *this;
}
所以它不是偏移0,而是附加值0。
答案 1 :(得分:1)
pkt
可能属于重载operator<<
的类类型;如果不是这样,所有这些陈述都没有效果,因为它的结果没有被使用。 (pkt << 0
而非pkt <<= 0
)。